Initial commit
This commit is contained in:
Executable
+128
@@ -0,0 +1,128 @@
|
||||
//
|
||||
// JHRefreshFooterView.m
|
||||
// JHRefresh
|
||||
//
|
||||
// Created by Jiahai on 14-9-16.
|
||||
// Copyright (c) 2014年 Jiahai. All rights reserved.
|
||||
//
|
||||
|
||||
#import "JHRefreshFooterView.h"
|
||||
#import "JHRefreshConfig.h"
|
||||
#import "UIView+JHExtension.h"
|
||||
#import "UIScrollView+JHExtension.h"
|
||||
|
||||
@implementation JHRefreshFooterView
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
// Initialization code
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)willMoveToSuperview:(UIView *)newSuperview
|
||||
{
|
||||
[super willMoveToSuperview:newSuperview];
|
||||
|
||||
[self.superview removeObserver:self forKeyPath:JHRefreshContentSize];
|
||||
|
||||
[newSuperview addObserver:self forKeyPath:JHRefreshContentSize options:NSKeyValueObservingOptionNew context:nil];
|
||||
|
||||
[self ajustFooterView];
|
||||
}
|
||||
|
||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
{
|
||||
if([keyPath isEqualToString:JHRefreshContentSize])
|
||||
{
|
||||
[self ajustFooterView];
|
||||
}
|
||||
|
||||
//正在刷新,直接返回
|
||||
if(self.state == JHRefreshStateRefreshing)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if([keyPath isEqualToString:JHRefreshContentOffset])
|
||||
{
|
||||
[self changeStateWithContentOffset];
|
||||
|
||||
if([self.aniView respondsToSelector:@selector(refreshViewPullingToPosition:)])
|
||||
{
|
||||
NSInteger pos = self.scrollView.contentOffset.y + self.scrollView.jh_height - self.scrollView.jh_contentSizeHeight-self.scrollView.jh_contentInsetBottom;
|
||||
|
||||
//footerView不可见/全部显示后,直接返回
|
||||
if(pos <= 0 || pos > JHRefreshViewHeight)
|
||||
return;
|
||||
|
||||
[self.aniView refreshViewPullingToPosition:pos];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)changeStateWithContentOffset
|
||||
{
|
||||
CGFloat currentOffsetY = self.scrollView.contentOffset.y;
|
||||
CGFloat releaseToRefreshOffsetY = MAX(self.scrollView.jh_contentSizeHeight,self.scrollView.jh_height) - self.scrollView.jh_height + self.scrollView.jh_contentInsetBottom;
|
||||
|
||||
//footerView的顶端不可见时,直接返回
|
||||
if(currentOffsetY <= releaseToRefreshOffsetY)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
releaseToRefreshOffsetY += JHRefreshViewHeight;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 调整footerView的位置
|
||||
*/
|
||||
- (void)ajustFooterView
|
||||
{
|
||||
CGFloat contentSizeHeight = self.scrollView.jh_contentSizeHeight;
|
||||
CGFloat height = self.scrollView.jh_height;
|
||||
|
||||
self.jh_originY = MAX(height, contentSizeHeight);
|
||||
}
|
||||
|
||||
- (void)setRefreshingContentInset
|
||||
{
|
||||
self.scrollView.jh_contentInsetBottom += JHRefreshViewHeight;
|
||||
}
|
||||
|
||||
- (void)resumeContentInset
|
||||
{
|
||||
self.scrollView.jh_contentInsetBottom -= JHRefreshViewHeight;
|
||||
}
|
||||
|
||||
/*
|
||||
// Only override drawRect: if you perform custom drawing.
|
||||
// An empty implementation adversely affects performance during animation.
|
||||
- (void)drawRect:(CGRect)rect
|
||||
{
|
||||
// Drawing code
|
||||
}
|
||||
*/
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user