ifish/Ifish/JHRefresh/JHRefreshHeaderView.m

106 lines
2.7 KiB
Objective-C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// JHRefreshHeaderView.m
// JHRefresh
//
// Created by Jiahai on 14-9-15.
// Copyright (c) 2014年 Jiahai. All rights reserved.
//
#import "JHRefreshHeaderView.h"
#import "JHRefreshConfig.h"
#import "UIScrollView+JHExtension.h"
#import "UIView+JHExtension.h"
@implementation JHRefreshHeaderView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)willMoveToSuperview:(UIView *)newSuperview
{
[super willMoveToSuperview:newSuperview];
self.jh_originY = -JHRefreshViewHeight;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if(self.state == JHRefreshStateRefreshing)
return;
if([keyPath isEqualToString:JHRefreshContentOffset])
{
[self changeStateWithContentOffset];
if([self.aniView respondsToSelector:@selector(refreshViewPullingToPosition:)])
{
NSInteger pos = self.scrollView.contentOffset.y;
//headerView不可见/全部可见时,直接返回
if(pos > 0 || pos < -JHRefreshViewHeight-self.scrollView.jh_contentInsetTop)
return;
[self.aniView refreshViewPullingToPosition:abs((int)pos)-self.scrollView.jh_contentInsetTop];
}
}
}
- (void)changeStateWithContentOffset
{
CGFloat currentOffsetY = self.scrollView.contentOffset.y;
CGFloat releaseToRefreshOffsetY = - self.scrollView.jh_contentInsetTop;
//headerView的顶端不可见时直接返回
if(currentOffsetY>=releaseToRefreshOffsetY)
return;
releaseToRefreshOffsetY -= self.jh_height;
if(self.scrollView.isDragging)
{
if(self.state == JHRefreshStateNormal && currentOffsetY < releaseToRefreshOffsetY)
{
//即将刷新
self.state = JHRefreshStatePulling;
}
else if(self.state == JHRefreshStatePulling && currentOffsetY>=releaseToRefreshOffsetY)
{
//普通状态
self.state = JHRefreshStateNormal;
}
}
else if (self.state == JHRefreshStatePulling)
{
//开始刷新
self.state = JHRefreshStateRefreshing;
}
}
- (void)setRefreshingContentInset
{
self.scrollView.jh_contentInsetTop += JHRefreshViewHeight;
}
- (void)resumeContentInset
{
self.scrollView.jh_contentInsetTop -= JHRefreshViewHeight;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end