Bläddra i källkod

speed up autofooter

change way to deal auto footer
M了个J 7 år sedan
förälder
incheckning
628266f540

+ 1 - 1
MJRefresh.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name         = 'MJRefresh'
-    s.version      = '3.1.15.1'
+    s.version      = '3.1.15.2'
     s.summary      = 'An easy way to use pull-to-refresh'
     s.homepage     = 'https://github.com/CoderMJLee/MJRefresh'
     s.license      = 'MIT'

+ 3 - 0
MJRefresh/Base/MJRefreshAutoFooter.h

@@ -17,4 +17,7 @@
 
 /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
 @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
+
+/** 是否每一次拖拽只发一次请求 */
+@property (assign, nonatomic, getter=isOnlyRefreshPerDrag) BOOL onlyRefreshPerDrag;
 @end

+ 19 - 4
MJRefresh/Base/MJRefreshAutoFooter.m

@@ -9,6 +9,8 @@
 #import "MJRefreshAutoFooter.h"
 
 @interface MJRefreshAutoFooter()
+/** 一个新的拖拽 */
+@property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan;
 @end
 
 @implementation MJRefreshAutoFooter
@@ -53,6 +55,9 @@ - (void)prepare
     
     // 设置为默认状态
     self.automaticallyRefresh = YES;
+    
+    // 默认是当offset达到条件就发送请求(可连续)
+    self.onlyRefreshPerDrag = NO;
 }
 
 - (void)scrollViewContentSizeDidChange:(NSDictionary *)change
@@ -89,7 +94,8 @@ - (void)scrollViewPanStateDidChange:(NSDictionary *)change
     
     if (self.state != MJRefreshStateIdle) return;
     
-    if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开
+    UIGestureRecognizerState panState = _scrollView.panGestureRecognizer.state;
+    if (panState == UIGestureRecognizerStateEnded) {// 手松开
         if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) {  // 不够一个屏幕
             if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 向上拽
                 [self beginRefreshing];
@@ -99,17 +105,26 @@ - (void)scrollViewPanStateDidChange:(NSDictionary *)change
                 [self beginRefreshing];
             }
         }
+    } else if (panState == UIGestureRecognizerStateBegan) {
+        self.oneNewPan = YES;
     }
 }
 
+- (void)beginRefreshing
+{
+    if (!self.isOneNewPan && self.isOnlyRefreshPerDrag) return;
+    
+    [super beginRefreshing];
+    
+    self.oneNewPan = NO;
+}
+
 - (void)setState:(MJRefreshState)state
 {
     MJRefreshCheckState
     
     if (state == MJRefreshStateRefreshing) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self executeRefreshingCallback];
-        });
+        [self executeRefreshingCallback];
     } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
         if (MJRefreshStateRefreshing == oldState) {
             if (self.endRefreshingCompletionBlock) {

+ 4 - 2
MJRefreshExample.xcodeproj/project.pbxproj

@@ -919,11 +919,12 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
+				DEVELOPMENT_TEAM = "";
 				GCC_PREFIX_HEADER = MJRefreshExample/PrefixHeader.pch;
 				INFOPLIST_FILE = MJRefreshExample/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = "com.mj.$(PRODUCT_NAME:rfc1034identifier)";
+				PRODUCT_BUNDLE_IDENTIFIER = com.mj.MJRefresh;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Debug;
@@ -933,11 +934,12 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
+				DEVELOPMENT_TEAM = "";
 				GCC_PREFIX_HEADER = MJRefreshExample/PrefixHeader.pch;
 				INFOPLIST_FILE = MJRefreshExample/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				PRODUCT_BUNDLE_IDENTIFIER = "com.mj.$(PRODUCT_NAME:rfc1034identifier)";
+				PRODUCT_BUNDLE_IDENTIFIER = com.mj.MJRefresh;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Release;

+ 1 - 0
MJRefreshExample/Classes/Second/MJTableViewController.m

@@ -141,6 +141,7 @@ - (void)example11
     self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
         [weakSelf loadMoreData];
     }];
+//    ((MJRefreshAutoFooter *)self.tableView.mj_footer).onlyRefreshPerDrag = YES;
 }
 
 #pragma mark UITableView + 上拉刷新 动画图片