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