123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #import "SDRefreshFooterView.h"
- #import "UIView+SDExtension.h"
- @implementation SDRefreshFooterView
- {
- CGFloat _originalScrollViewContentHeight;
- }
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- self.textForNormalState = @"上拉可以加载最新数据";
- self.stateIndicatorViewNormalTransformAngle = M_PI;
- self.stateIndicatorViewWillRefreshStateTransformAngle = 0;
- [self setRefreshState:SDRefreshViewStateNormal];
- }
- return self;
- }
- - (void)layoutSubviews
- {
- [super layoutSubviews];
-
- self.activityIndicatorView.hidden = YES;
- _originalScrollViewContentHeight = self.scrollView.contentSize.height;
- self.center = CGPointMake(self.scrollView.sd_width * 0.5, self.scrollView.contentSize.height + self.sd_height * 0.5);
-
- self.hidden = [self shouldHide];
- }
- - (void)didMoveToSuperview
- {
- [super didMoveToSuperview];
- self.scrollViewEdgeInsets = UIEdgeInsetsMake(0, 0, self.sd_height, 0);
- }
- - (BOOL)shouldHide
- {
- if (self.isEffectedByNavigationController) {
- return (self.scrollView.bounds.size.height - SDKNavigationBarHeight > self.sd_y);
- }
- return (self.scrollView.bounds.size.height> self.sd_y);
- }
- - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
- {
- if (![keyPath isEqualToString:SDRefreshViewObservingkeyPath] || self.refreshState == SDRefreshViewStateRefreshing) return;
-
- CGFloat y = [change[@"new"] CGPointValue].y;
- CGFloat criticalY = self.scrollView.contentSize.height - self.scrollView.sd_height + self.sd_height + self.scrollView.contentInset.bottom;
-
-
- if (self.scrollView.contentSize.height != _originalScrollViewContentHeight) {
- [self layoutSubviews];
- }
-
-
- if ((y <= 0) || (self.scrollView.bounds.size.height == 0)) return;
-
-
- if (y <= criticalY && (self.refreshState == SDRefreshViewStateWillRefresh) && !self.scrollView.isDragging) {
- [self setRefreshState:SDRefreshViewStateRefreshing];
- return;
- }
-
-
- if (y > criticalY && (SDRefreshViewStateNormal == self.refreshState)) {
- if (self.hidden) return;
- [self setRefreshState:SDRefreshViewStateWillRefresh];
- return;
- }
-
- if (y <= criticalY && self.scrollView.isDragging && (SDRefreshViewStateNormal != self.refreshState)) {
- [self setRefreshState:SDRefreshViewStateNormal];
- }
-
- }
- @end
|