慢動(dòng)作下動(dòng)畫
iOS動(dòng)畫.gif
@implementation DZAnimatedController {
UIView *_view1;
UIView *_view2;
UIView *_view3;
BOOL selected;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"AnimatedController";
UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60)];
view1.backgroundColor = [UIColor greenColor];
[self.view addSubview:view1];
[view1.layer setCornerRadius:30];
[view1.layer setMasksToBounds:YES];
_view1 = view1;
_view1.alpha = 0;
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60)];
view2.backgroundColor = [UIColor blueColor];
[self.view addSubview:view2];
[view2.layer setCornerRadius:30];
[view2.layer setMasksToBounds:YES];
_view2 = view2;
_view2.alpha = 0;
UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60)];
view3.backgroundColor = [UIColor redColor];
[self.view addSubview:view3];
[view3.layer setCornerRadius:30];
[view3.layer setMasksToBounds:YES];
_view3 = view3;
_view3.alpha = 0;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake((CGRectGetWidth(self.view.frame)-60)/2, CGRectGetHeight(self.view.frame)-80, 60, 60);
btn.backgroundColor = [UIColor grayColor];
[self.view addSubview:btn];
[btn.layer setCornerRadius:30];
[btn.layer setMasksToBounds:YES];
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
/**
iOS中的動(dòng)畫就是圍繞著UIView的幾個(gè)屬性來玩的, frame, bounds, center, background, transform, alpha, coententStretch,
iOS中動(dòng)畫的方式有三種:
1. UIView(UIViewAnimation): 也成首尾式動(dòng)畫
2. UIView(UIViewAnimationWithBlock): block動(dòng)畫, iOS中最常用, 是對(duì)首尾式動(dòng)畫的進(jìn)一步封裝.
3. CoreAnimation: 主要作用CALayer
*/
//通過(描述彈簧的運(yùn)動(dòng))時(shí)間曲線 來 執(zhí)行動(dòng)畫, 當(dāng)阻尼比為1的時(shí)候, 該動(dòng)畫 將(沒有任何震蕩地)平穩(wěn)的減速到最終的模型值,
//阻尼比小于1的話,將反復(fù)震蕩直到完全停止.
/* Performs `animations` using a timing curve described by the motion of a spring. When `dampingRatio` is 1, the animation will smoothly
decelerate to its final model values without oscillating. Damping ratios less than 1 will oscillate more and more before coming to a complete stop.
You can use the initial spring velocity to specify how fast the object at the end of the simulated spring was moving before it was attached. It's a unit
coordinate system, where 1 is defined as travelling the total animation distance in a second. So if you're changing an object's position by 200pt in
this animation, and you want the animation to behave as if the object was moving at 100pt/s before the animation started, you'd pass 0.5. You'll
typically want to pass 0 for the velocity. */
//timing curve 時(shí)間曲線
//motion of spring 彈簧的運(yùn)動(dòng)(移動(dòng))
//dampingRato 阻尼比
//oscillating 震蕩
}
- (void)clickBtn:(UIButton *)btn {
[UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:.4 initialSpringVelocity:.6 options:UIViewAnimationOptionCurveLinear animations:^{
if(!selected) {
_view1.alpha = 1;
_view2.alpha = 1;
_view3.alpha = 1;
_view1.transform = CGAffineTransformMakeTranslation(-80, -100);
_view2.transform = CGAffineTransformMakeTranslation(0, -100);
_view3.transform = CGAffineTransformMakeTranslation(80, -100);
} else {
_view1.alpha = 0;
_view2.alpha = 0;
_view3.alpha = 0;
_view1.transform = CGAffineTransformIdentity;
_view2.transform = CGAffineTransformIdentity;
_view3.transform = CGAffineTransformIdentity;
}
[btn setEnabled:NO];
} completion:^(BOOL finished) {
selected = !selected;
[btn setEnabled:YES];
}];
}
@end
iOS動(dòng)畫.gif