Files
ifish/Ifish/JHRefresh/JHRefreshHeaderView.m
T
2017-08-15 16:59:01 +08:00

106 lines
2.7 KiB
Objective-C
Executable File

//
// 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