| /* |
| 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.0f; |
| const NSTimeInterval kAnimationTimeDelay = 0.5f; |
| |
| @interface AnimationTimingExample () |
| |
| @end |
| |
| @implementation AnimationTimingExample |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| [self setupExampleViews]; |
| } |
| |
| - (void)viewDidAppear:(BOOL)animated { |
| [super viewDidAppear:animated]; |
| NSTimeInterval timeInterval = 2 * (kAnimationTimeInterval + kAnimationTimeDelay); |
| [_animationLoop invalidate]; |
| _animationLoop = [NSTimer scheduledTimerWithTimeInterval:timeInterval |
| target:self |
| selector:@selector(playAnimations:) |
| userInfo:nil |
| repeats:YES]; |
| [self playAnimations:nil]; |
| } |
| |
| - (void)playAnimations:(NSTimer *)timer { |
| CAMediaTimingFunction *linearTimingCurve = |
| [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; |
| [self applyAnimationToView:_linearView withTimingFunction:linearTimingCurve]; |
| |
| CAMediaTimingFunction *materialStandardCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionStandard]; |
| [self applyAnimationToView:_materialStandardView withTimingFunction:materialStandardCurve]; |
| |
| CAMediaTimingFunction *materialDecelerationCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionDeceleration]; |
| [self applyAnimationToView:_materialDecelerationView withTimingFunction:materialDecelerationCurve]; |
| |
| CAMediaTimingFunction *materialAccelerationCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionAcceleration]; |
| [self applyAnimationToView:_materialAccelerationView withTimingFunction:materialAccelerationCurve]; |
| |
| CAMediaTimingFunction *materialSharpCurve = |
| [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionSharp]; |
| [self applyAnimationToView:_materialSharpView withTimingFunction:materialSharpCurve]; |
| } |
| |
| - (void)applyAnimationToView:(UIView *)view |
| withTimingFunction:(CAMediaTimingFunction *)timingFunction { |
| CGFloat animWidth = self.view.frame.size.width - view.frame.size.width - 32.f; |
| 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:nil]; |
| }]; |
| } |
| |
| @end |