Browse Source

add footer property appearencePercentTriggerAutoRefresh

appearencePercentTriggerAutoRefresh can decide what footer
appearencePercent will trigger auto refresh
MJLee 11 years ago
parent
commit
d23314ca4f

+ 3 - 0
MJRefreshExample/MJRefreshExample/Classes/MJTableViewController.m

@@ -281,6 +281,9 @@ - (void)example13
     // 添加动画图片的上拉刷新
     [self.tableView addGifFooter];
     
+    // 当上拉刷新控件出现50%时(出现一半),就会自动刷新。这个值默认是1.0(也就是上拉刷新100%出现时,才会自动刷新)
+//    self.tableView.footer.appearencePercentTriggerAutoRefresh = 0.5;
+    
     // 隐藏状态
     self.tableView.footer.stateHidden = YES;
     

+ 2 - 0
MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.h

@@ -32,4 +32,6 @@ typedef enum {
 /** 是否自动刷新(默认为YES) */
 @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
 
+/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
+@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh;
 @end

+ 8 - 6
MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.m

@@ -61,6 +61,9 @@ - (UILabel *)stateLabel
 #pragma mark - 初始化方法
 - (instancetype)initWithFrame:(CGRect)frame {
     if (self = [super initWithFrame:frame]) {
+        // 默认底部控件100%出现时才会自动刷新
+        self.appearencePercentTriggerAutoRefresh = 1.0;
+        
         // 设置为默认状态
         self.automaticallyRefresh = YES;
         self.state = MJRefreshFooterStateIdle;
@@ -112,11 +115,11 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N
     // 根据contentOffset调整state
     if ([keyPath isEqualToString:MJRefreshPanState]) {
         if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开
-            if (_scrollView.mj_insetT + _scrollView.mj_insetB + _scrollView.mj_contentSizeH <= _scrollView.mj_h) {  // 不够一个屏幕
+            if (_scrollView.mj_insetT + _scrollView.mj_contentSizeH <= _scrollView.mj_h) {  // 不够一个屏幕
                 if (_scrollView.mj_offsetY > - _scrollView.mj_insetT) { // 向上拽
                     self.state = MJRefreshFooterStateRefreshing;
                 }
-            } else {
+            } else { // 超出一个屏幕
                 if (_scrollView.mj_offsetY > self.mj_y + _scrollView.mj_insetB - _scrollView.mj_h) {
                     self.state = MJRefreshFooterStateRefreshing;
                 }
@@ -136,10 +139,9 @@ - (void)adjustStateWithContentOffset
 {
     if (self.mj_y == 0) return;
     
-    if (_scrollView.mj_insetT + _scrollView.mj_insetB + _scrollView.mj_contentSizeH >
-        _scrollView.mj_h) { // 内容超过一个屏幕
-        CGPoint point = [self convertPoint:self.bounds.origin toView:nil];
-        if (CGRectContainsPoint(self.window.bounds, point)) {
+    if (_scrollView.mj_insetT + _scrollView.mj_contentSizeH > _scrollView.mj_h) { // 内容超过一个屏幕
+        if (_scrollView.mj_offsetY > self.mj_y - _scrollView.mj_h + self.mj_h * self.appearencePercentTriggerAutoRefresh) {
+            // 当底部刷新控件完全出现时,才刷新
             self.state = MJRefreshFooterStateRefreshing;
         }
     }