diff --git a/AAPullToRefresh/AAPullToRefresh.h b/AAPullToRefresh/AAPullToRefresh.h index 8b89034..3eb0e80 100644 --- a/AAPullToRefresh/AAPullToRefresh.h +++ b/AAPullToRefresh/AAPullToRefresh.h @@ -37,4 +37,5 @@ typedef NS_ENUM(NSUInteger, AAPullToRefreshPosition) { @interface UIScrollView (AAPullToRefresh) - (AAPullToRefresh *)addPullToRefreshPosition:(AAPullToRefreshPosition)position actionHandler:(void (^)(AAPullToRefresh *v))handler; +- (AAPullToRefresh *)addPullToRefreshPosition:(AAPullToRefreshPosition)position image:(UIImage *)image actionHandler:(void (^)(AAPullToRefresh *v))handler; @end diff --git a/AAPullToRefresh/AAPullToRefresh.m b/AAPullToRefresh/AAPullToRefresh.m index 01a3818..002ca10 100644 --- a/AAPullToRefresh/AAPullToRefresh.m +++ b/AAPullToRefresh/AAPullToRefresh.m @@ -34,6 +34,37 @@ - (AAPullToRefresh *)addPullToRefreshPosition:(AAPullToRefreshPosition)position return view; } + +- (AAPullToRefresh *)addPullToRefreshPosition:(AAPullToRefreshPosition)position image:(UIImage *)image actionHandler:(void (^)(AAPullToRefresh *v))handler +{ + AAPullToRefresh *view = [[AAPullToRefresh alloc] initWithImage:image + position:position]; + switch (view.position) { + case AAPullToRefreshPositionTop: + case AAPullToRefreshPositionBottom: + view.frame = CGRectMake((self.bounds.size.width - view.bounds.size.width)/2, + -view.bounds.size.height, view.bounds.size.width, view.bounds.size.height); + break; + case AAPullToRefreshPositionLeft: + view.frame = CGRectMake(-view.bounds.size.width, self.bounds.size.height/2.0f, view.bounds.size.width, view.bounds.size.height); + break; + case AAPullToRefreshPositionRight: + view.frame = CGRectMake(self.bounds.size.width, self.bounds.size.height/2.0f, view.bounds.size.width, view.bounds.size.height); + break; + default: + break; + } + + view.pullToRefreshHandler = handler; + view.scrollView = self; + view.originalInsetTop = self.contentInset.top; + view.originalInsetBottom = self.contentInset.bottom; + view.showPullToRefresh = YES; + [self addSubview:view]; + + return view; +} + @end @interface AAPullToRefreshBackgroundLayer : CALayer @@ -363,8 +394,18 @@ - (void)scrollViewDidScroll:(CGPoint)contentOffset } break; case AAPullToRefreshStateStopped: // finish - case AAPullToRefreshStateLoading: // wait until stopIndicatorAnimation break; + case AAPullToRefreshStateLoading: + { + if (self.position == AAPullToRefreshPositionTop) { + CGFloat height = self.bounds.size.height + 20.0f; + CGFloat insetAdjustment = yOffset < 0 ? fmaxf(0, height + yOffset) : height; + UIEdgeInsets currentInsets = self.scrollView.contentInset; + currentInsets.top = height - insetAdjustment; + self.scrollView.contentInset = currentInsets; + } + break; + } default: break; }