Commit 1f36107f authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Fullscreen animation polish for fast scoll events.

This CL updates fullscreen to:
- not perform an animation if a scroll ends when the toolbar is fully
  visible or hidden.
- scale the scroll end adjustment animation duration to the fraction
  of progress change required.

Bug: 796597
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I8939fbdd93735155e41a9ed1e2d19d1b72902b4a
Reviewed-on: https://chromium-review.googlesource.com/841535Reviewed-by: default avatarKurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarLouis Romero <lpromero@chromium.org>
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#526026}
parent 409a9cc3
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_observer.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_observer.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_model.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_model.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_scroll_end_animator.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_scroll_end_animator.h"
#include "ios/chrome/browser/ui/ui_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -64,8 +65,11 @@ void FullscreenMediator::FullscreenModelScrollEventEnded( ...@@ -64,8 +65,11 @@ void FullscreenMediator::FullscreenModelScrollEventEnded(
FullscreenModel* model) { FullscreenModel* model) {
DCHECK_EQ(model_, model); DCHECK_EQ(model_, model);
DCHECK(!animator_); DCHECK(!animator_);
animator_ = [[FullscreenScrollEndAnimator alloc] CGFloat progress = model_->progress();
initWithStartProgress:model_->progress()]; if (AreCGFloatsEqual(progress, 0.0) || AreCGFloatsEqual(progress, 1.0))
return;
animator_ =
[[FullscreenScrollEndAnimator alloc] initWithStartProgress:progress];
[animator_ addCompletion:^(UIViewAnimatingPosition finalPosition) { [animator_ addCompletion:^(UIViewAnimatingPosition finalPosition) {
DCHECK_EQ(finalPosition, UIViewAnimatingPositionEnd); DCHECK_EQ(finalPosition, UIViewAnimatingPositionEnd);
model_->AnimationEndedWithProgress( model_->AnimationEndedWithProgress(
......
...@@ -33,8 +33,15 @@ ...@@ -33,8 +33,15 @@
UICubicTimingParameters* timingParams = [[UICubicTimingParameters alloc] UICubicTimingParameters* timingParams = [[UICubicTimingParameters alloc]
initWithControlPoint1:CGPointMake(0.0, 0.0) initWithControlPoint1:CGPointMake(0.0, 0.0)
controlPoint2:CGPointMake(0.2, 0.1)]; controlPoint2:CGPointMake(0.2, 0.1)];
self = [super initWithDuration:ios::material::kDuration1 DCHECK_GE(startProgress, 0.0);
timingParameters:timingParams]; DCHECK_LE(startProgress, 1.0);
CGFloat finalProgress = roundf(startProgress);
// Scale the duration by the progress delta traversed in this animation.
// Since |finalProgress - startProgress| <= 0.5, the delta is multiplied by
// 2.0.
NSTimeInterval duration =
2.0 * fabs(finalProgress - startProgress) * ios::material::kDuration1;
self = [super initWithDuration:duration timingParameters:timingParams];
if (self) { if (self) {
DCHECK_GE(startProgress, 0.0); DCHECK_GE(startProgress, 0.0);
DCHECK_LE(startProgress, 1.0); DCHECK_LE(startProgress, 1.0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment