mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-12 06:20:45 +08:00
92 lines
3.7 KiB
Objective-C
92 lines
3.7 KiB
Objective-C
/*
|
|
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
|