| // Copyright 2016-present the Material Components for iOS authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #import "MaterialAnimationTiming.h" |
| #import "supplemental/AnimationTimingExampleSupplemental.h" |
| |
| const NSTimeInterval kAnimationTimeInterval = 1; |
| const NSTimeInterval kAnimationTimeDelay = 0.5; |
| |
| @interface AnimationTimingExample () |
| |
| @end |
| |
| @implementation AnimationTimingExample |
| |
| - (void)didTapAnimateButton:(UIButton *)sender { |
| sender.enabled = NO; |
| [self playAnimations:^(BOOL ignored) { |
| sender.enabled = YES; |
| }]; |
| } |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| [self setupExampleViews]; |
| |
| self.navigationItem.rightBarButtonItem = |
| [[UIBarButtonItem alloc] initWithTitle:@"Animate" |
| style:UIBarButtonItemStylePlain |
| target:self |
| action:@selector(didTapAnimateButton:)]; |
| } |
| |
| - (void)playAnimations:(void (^)(BOOL))completion { |
| CAMediaTimingFunction *linearTimingCurve = |
| [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; |
| [self applyAnimationToView:_linearView withTimingFunction:linearTimingCurve completion:nil]; |
| |
| CAMediaTimingFunction *materialStandardCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionStandard]; |
| [self applyAnimationToView:_materialStandardView |
| withTimingFunction:materialStandardCurve |
| completion:nil]; |
| |
| CAMediaTimingFunction *materialDecelerationCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionDeceleration]; |
| [self applyAnimationToView:_materialDecelerationView |
| withTimingFunction:materialDecelerationCurve |
| completion:nil]; |
| |
| CAMediaTimingFunction *materialAccelerationCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionAcceleration]; |
| [self applyAnimationToView:_materialAccelerationView |
| withTimingFunction:materialAccelerationCurve |
| completion:nil]; |
| |
| CAMediaTimingFunction *materialSharpCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionSharp]; |
| [self applyAnimationToView:_materialSharpView |
| withTimingFunction:materialSharpCurve |
| completion:completion]; |
| } |
| |
| - (void)applyAnimationToView:(UIView *)view |
| withTimingFunction:(CAMediaTimingFunction *)timingFunction |
| completion:(void (^)(BOOL))completion { |
| CGFloat animWidth = self.view.frame.size.width - view.frame.size.width - 32; |
| CGAffineTransform transform = CGAffineTransformMakeTranslation(animWidth, 0); |
| [UIView mdc_animateWithTimingFunction:timingFunction |
| duration:kAnimationTimeInterval |
| delay:kAnimationTimeDelay |
| options:0 |
| animations:^{ |
| view.transform = transform; |
| } |
| completion:^(BOOL finished) { |
| [UIView mdc_animateWithTimingFunction:timingFunction |
| duration:kAnimationTimeInterval |
| delay:kAnimationTimeDelay |
| options:0 |
| animations:^{ |
| view.transform = CGAffineTransformIdentity; |
| } |
| completion:completion]; |
| }]; |
| } |
| |
| @end |