| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/ui/tabs/switch_to_tab_animation_view.h" |
| |
| #include "base/i18n/rtl.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace { |
| const CGFloat kMiddleMargin = 80; |
| const CGFloat kAnimationTime = 0.35; |
| } // namespace |
| |
| @implementation SwitchToTabAnimationView |
| |
| - (instancetype)initWithFrame:(CGRect)frame { |
| self = [super initWithFrame:frame]; |
| if (self) { |
| self.backgroundColor = [UIColor colorWithWhite:0.13 alpha:1]; |
| } |
| return self; |
| } |
| |
| - (void)animateFromCurrentView:(UIView*)currentView |
| toNewView:(UIView*)newView |
| inPosition:(SwitchToTabAnimationPosition)position { |
| CGRect leftViewInitialFrame = self.bounds; |
| CGRect rightViewInitialFrame = self.bounds; |
| CGRect leftViewFinalFrame = self.bounds; |
| CGRect rightViewFinalFrame = self.bounds; |
| UIView* rightView; |
| UIView* leftView; |
| |
| BOOL directionLeft = |
| ((position == SwitchToTabAnimationPositionBefore) && |
| !base::i18n::IsRTL()) || |
| ((position == SwitchToTabAnimationPositionAfter) && base::i18n::IsRTL()); |
| |
| if (directionLeft) { |
| rightView = currentView; |
| leftView = newView; |
| leftViewInitialFrame.origin.x -= self.bounds.size.width + kMiddleMargin; |
| rightViewFinalFrame.origin.x += self.bounds.size.width + kMiddleMargin; |
| } else { |
| rightView = newView; |
| leftView = currentView; |
| rightViewInitialFrame.origin.x += self.bounds.size.width + kMiddleMargin; |
| leftViewFinalFrame.origin.x -= self.bounds.size.width + kMiddleMargin; |
| } |
| |
| [self addSubview:rightView]; |
| [self addSubview:leftView]; |
| |
| leftView.frame = leftViewInitialFrame; |
| rightView.frame = rightViewInitialFrame; |
| |
| [UIView animateWithDuration:kAnimationTime |
| animations:^{ |
| leftView.frame = leftViewFinalFrame; |
| rightView.frame = rightViewFinalFrame; |
| } |
| completion:^(BOOL finished) { |
| [self removeFromSuperview]; |
| }]; |
| } |
| |
| @end |