Brion VIBBER has submitted this change and it was merged.

Change subject: Pull to refresh faster. No longer sometimes stuck half onscreen.
......................................................................


Pull to refresh faster. No longer sometimes stuck half onscreen.

Change-Id: Ic35d4e44569e604b641538b9a7ddb217c7366144
---
M wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.h
M wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.m
M wikipedia/View Controllers/WebView/WebViewController.m
3 files changed, 74 insertions(+), 82 deletions(-)

Approvals:
  Brion VIBBER: Verified; Looks good to me, approved



diff --git a/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.h b/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.h
index 1810cb7..161f96b 100644
--- a/wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.h
+++ b/wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.h
@@ -1,17 +1,10 @@
-//
-//  PullToRefreshViewController.h
-//  Wikipedia
-//
 //  Created by Brion on 7/8/14.
-//  Copyright (c) 2014 Wikimedia Foundation. All rights reserved.
-//
+//  Copyright (c) 2014 Wikimedia Foundation. Provided under MIT-style license; 
please copy and modify!
 
 #import <UIKit/UIKit.h>
 
 @interface PullToRefreshViewController : UIViewController 
<UIScrollViewDelegate>
 
-@property (weak, nonatomic) NSLayoutConstraint 
*pullToRefreshViewBottomConstraint;
-@property (strong, nonatomic) UILabel *pullToRefreshLabel;
 @property (strong, nonatomic) UIView *pullToRefreshView;
 
 /**
diff --git a/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.m b/wikipedia/View 
Controllers/PullToRefresh/PullToRefreshViewController.m
index 42d8f3d..c1267f8 100644
--- a/wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.m
+++ b/wikipedia/View Controllers/PullToRefresh/PullToRefreshViewController.m
@@ -1,64 +1,46 @@
-//
-//  PullToRefreshViewController.m
-//  Wikipedia
-//
 //  Created by Brion on 7/8/14.
-//  Copyright (c) 2014 Wikimedia Foundation. All rights reserved.
-//
+//  Copyright (c) 2014 Wikimedia Foundation. Provided under MIT-style license; 
please copy and modify!
 
 #import "PullToRefreshViewController.h"
 
 @interface PullToRefreshViewController ()
 
+@property (strong, nonatomic) NSLayoutConstraint 
*pullToRefreshViewBottomConstraint;
+@property (strong, nonatomic) UILabel *pullToRefreshLabel;
+@property (nonatomic) BOOL isAnimatingHide;
+
 @end
 
 @implementation PullToRefreshViewController
-
-- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle 
*)nibBundleOrNil
-{
-    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
-    if (self) {
-        // Custom initialization
-    }
-    return self;
-}
 
 - (void)viewDidLoad
 {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     
+    self.isAnimatingHide = NO;
+    
     // Take over the scroll view's delegate
     UIScrollView *scrollView = [self refreshScrollView];
-    assert(scrollView != nil);
-    scrollView.delegate = self;
-    [self setupPullToRefresh];
+    if(scrollView){
+        scrollView.delegate = self;
+        [self setupPullToRefresh];
+    }
 }
-
-- (void)didReceiveMemoryWarning
-{
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
-/*
-#pragma mark - Navigation
-
-// In a storyboard-based application, you will often want to do a little 
preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
-{
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
-}
-*/
 
 #pragma mark - UIScrollViewDelegate methods
 
 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
 {
-    [self updatePullToRefreshForScrollView:scrollView];
-}
+    if (self.isAnimatingHide || !self.pullToRefreshView) return;
 
+    //NSUInteger numberToSkip = 2;
+    //static NSInteger counter = -1;
+    //if (++counter == numberToSkip) {
+        [self updatePullToRefreshForScrollView:scrollView];
+    //    counter = -1;
+    //}
+}
 
 #pragma mark - Internal methods
 
@@ -66,7 +48,6 @@
 {
     self.pullToRefreshLabel = [[UILabel alloc] init];
     self.pullToRefreshLabel.translatesAutoresizingMaskIntoConstraints = NO;
-    self.pullToRefreshLabel.backgroundColor = [UIColor clearColor];
     self.pullToRefreshLabel.textAlignment = NSTextAlignmentCenter;
     self.pullToRefreshLabel.numberOfLines = 2;
     self.pullToRefreshLabel.font = [UIFont systemFontOfSize:10];
@@ -74,7 +55,6 @@
     
     self.pullToRefreshView = [[UIView alloc] init];
     self.pullToRefreshView.alpha = 0.0f;
-    self.pullToRefreshView.backgroundColor = [UIColor clearColor];
     self.pullToRefreshView.translatesAutoresizingMaskIntoConstraints = NO;
     [self.view addSubview:self.pullToRefreshView];
     [self.pullToRefreshView addSubview:self.pullToRefreshLabel];
@@ -93,11 +73,12 @@
                                 multiplier: 1.0
                                   constant: 0];
     
-    NSDictionary *viewsDictionary = @{
-                                      @"pullToRefreshView": 
self.pullToRefreshView,
-                                      @"pullToRefreshLabel": 
self.pullToRefreshLabel,
-                                      @"selfView": self.view
-                                      };
+    NSDictionary *viewsDictionary =
+    @{
+      @"pullToRefreshView": self.pullToRefreshView,
+      @"pullToRefreshLabel": self.pullToRefreshLabel,
+      @"selfView": self.view
+      };
     
     NSArray *viewConstraintArrays =
     @[
@@ -121,20 +102,18 @@
 
 - (void)updatePullToRefreshForScrollView:(UIScrollView *)scrollView
 {
-    if (ROOT.isAnimatingTopAndBottomMenuHidden) return;
-    
     CGFloat pullDistance = 
(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) ? 85.0f : 55.0f;
     
-    UIGestureRecognizerState state = ((UIPinchGestureRecognizer 
*)scrollView.pinchGestureRecognizer).state;
+    UIPanGestureRecognizer *panRecognizer = scrollView.panGestureRecognizer;
+    //CGPoint translation = [panRecognizer translationInView:self.view];
     
     BOOL safeToShow =
     (!scrollView.decelerating)
     &&
-    (state == UIGestureRecognizerStatePossible)
+    (panRecognizer.state == UIGestureRecognizerStateChanged)
     &&
-    [self refreshShouldShow]
-    ;
-    
+    [self refreshShouldShow];
+
     //NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
     if ((scrollView.contentOffset.y < 0.0f)){
         
@@ -148,38 +127,49 @@
         NSString *lineOneText = @"";
         NSString *lineTwoText = [self refreshPromptString];
         
-        if (scrollView.contentOffset.y > -(pullDistance * 0.35)){
-            lineOneText = @"▫︎ ▫︎ ▫︎ ▫︎ ▫︎";
-        }else if (scrollView.contentOffset.y > -(pullDistance * 0.52)){
-            lineOneText = @"▫︎ ▫︎ ▪︎ ▫︎ ▫︎";
-        }else if (scrollView.contentOffset.y > -(pullDistance * 0.7)){
-            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎";
-        }else if (scrollView.contentOffset.y > -pullDistance){
-            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎";
+        // pullUnit is 0.0 to 1.0
+        CGFloat pullUnit = fabsf(scrollView.contentOffset.y) / pullDistance;
+        //NSLog(@"%f", pullUnit);
+        
+        if (pullUnit < 0.35) {
+            lineOneText = @"▫︎ ▫︎ ▫︎ ▫︎ ▫︎\n";
+        }else if (pullUnit < 0.52) {
+            lineOneText = @"▫︎ ▫︎ ▪︎ ▫︎ ▫︎\n";
+        }else if (pullUnit < 1.0) {
+            lineOneText = @"▫︎ ▪︎ ▪︎ ▪︎ ▫︎\n";
         }else{
-            lineOneText = @"▪︎ ▪︎ ▪︎ ▪︎ ▪︎";
+            lineOneText = @"▪︎ ▪︎ ▪︎ ▪︎ ▪︎\n";
             lineTwoText = [self refreshRunningString];
         }
         
-        self.pullToRefreshLabel.text = [NSString stringWithFormat:@"%@\n%@", 
lineOneText, lineTwoText];
+        self.pullToRefreshLabel.text = [lineOneText 
stringByAppendingString:lineTwoText];
+    }else{
+        self.pullToRefreshViewBottomConstraint.constant = 0;
     }
     
     if (scrollView.contentOffset.y < -pullDistance) {
         if (safeToShow) {
             [self refreshWasPulled];
-            [UIView animateWithDuration: 0.3f
-                                  delay: 0.6f
-                                options: UIViewAnimationOptionTransitionNone
-                             animations: ^{
-                                 self.pullToRefreshView.alpha = 0.0f;
-                                 
self.pullToRefreshViewBottomConstraint.constant = 0;
-                                 [self.view layoutIfNeeded];
-                                 scrollView.panGestureRecognizer.enabled = NO;
-                             } completion: ^(BOOL done){
-                                 scrollView.panGestureRecognizer.enabled = YES;
-                             }];
+            [self hideWithAnimation:scrollView];
         }
     }
+}
+
+-(void)hideWithAnimation:(UIScrollView *)scrollView
+{
+    self.isAnimatingHide = YES;
+    [UIView animateWithDuration: 0.3f
+                          delay: 0.6f
+                        options: UIViewAnimationOptionTransitionNone
+                     animations: ^{
+                         self.pullToRefreshView.alpha = 0.0f;
+                         self.pullToRefreshViewBottomConstraint.constant = 0;
+                         scrollView.panGestureRecognizer.enabled = NO;
+                         [self.view layoutIfNeeded];
+                     } completion: ^(BOOL done){
+                         scrollView.panGestureRecognizer.enabled = YES;
+                         self.isAnimatingHide = NO;
+                     }];
 }
 
 #pragma mark - override these
@@ -210,7 +200,6 @@
     return @"Refreshing (not localized)";
 }
 
-
 -(void)refreshWasPulled
 {
     NSLog(@"Don't forget to override refreshWasPulled");
@@ -221,4 +210,10 @@
     return YES;
 }
 
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
 @end
diff --git a/wikipedia/View Controllers/WebView/WebViewController.m 
b/wikipedia/View Controllers/WebView/WebViewController.m
index c96e4bc..3dd9217 100644
--- a/wikipedia/View Controllers/WebView/WebViewController.m
+++ b/wikipedia/View Controllers/WebView/WebViewController.m
@@ -2123,7 +2123,11 @@
 {
     NSString *title = [SessionSingleton sharedInstance].currentArticleTitle;
     
-    return (![self tocDrawerIsOpen]) && (title && (title.length > 0));
+    return (![self tocDrawerIsOpen])
+        &&
+        (title && (title.length > 0))
+        &&
+        (!ROOT.isAnimatingTopAndBottomMenuHidden);
 }
 
 #pragma mark Data migration

-- 
To view, visit https://gerrit.wikimedia.org/r/157491
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic35d4e44569e604b641538b9a7ddb217c7366144
Gerrit-PatchSet: 2
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mhurd <mh...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to