blob: b824d15d26891c7c49bd007d3b198be32bbc7161 [file] [log] [blame]
// 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