1、UIView 动画
- 核心动画 和 UIView 动画 的区别:
- 核心动画一切都是假象,并不会真实的改变图层的属性值,如果以后做动画的时候,不需要与用户交互,通常用核心动画(转场)。
- UIView 动画必须通过修改属性的真实值,才有动画效果。
1.1 block 方式
- 设置控件位置、尺寸、透明度等的代码,放在 animateWithDuration: block 中,将自动以动画的方式改变。
// 开始动画,动画持续时间 2 秒
[UIView animateWithDuration:1.0 animations:^{
// 设置动画结束后的效果值
// 改变控件的位置和尺寸,改变后的位置或大小
self.redView.frame = CGRectMake(150, 50, 50, 50);
} completion:^(BOOL finished) {
// 动画完成后的操作
// 开始一个新的动画
[UIView animateWithDuration:1.0 animations:^{
// 改变控件的位置和尺寸,改变后的位置或大小
self.redView.frame = CGRectMake(50, 150, 80, 80);
}];
}];
// 开始动画,动画持续时间 2 秒
[UIView animateWithDuration:1.0 animations:^{
// 设置动画结束后的效果值
// 改变控件的位置和尺寸,改变后的位置或大小
self.redView.frame = CGRectMake(150, 50, 50, 50);
} completion:^(BOOL finished) {
// 动画完成后的操作
// 开始一个新的动画
[UIView animateWithDuration:1.0 animations:^{
// 改变控件的位置和尺寸,改变后的位置或大小
self.redView.frame = CGRectMake(50, 150, 80, 80);
}];
}];
- 效果
- 弹簧效果的动画
[UIView animateWithDuration:1.0
delay:0
usingSpringWithDamping:0.2
initialSpringVelocity:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
// SpringWithDamping: 弹性系数,越小弹簧效果越明显
self.redView.frame = CGRectMake(150, 50, 50, 50);
} completion:nil];
[UIView animateWithDuration:1.0
delay:0
usingSpringWithDamping:0.2
initialSpringVelocity:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
// SpringWithDamping: 弹性系数,越小弹簧效果越明显
self.redView.frame = CGRectMake(150, 50, 50, 50);
} completion:nil];
- 效果
1.2 动画块方式
- 设置控件位置、尺寸、透明度等的代码,放在 beginAnimations: 和 commitAnimations 之间,将自动以动画的方式改变。
// 开始一个动画块
[UIView beginAnimations:nil context:nil];
// 动画设置
// 设置动画时间
[UIView setAnimationDuration:1.0]; // default = 0.2
// 设置延时
[UIView setAnimationDelay:0.0]; // 设置指定的时间后开始执行动画,default = 0.0
// 设置动画执行节奏
/*
UIViewAnimationCurveEaseInOut, // slow at beginning and end 开始和结束慢速,默认
UIViewAnimationCurveEaseIn, // slow at beginning 开始慢速
UIViewAnimationCurveEaseOut, // slow at end 结束慢速
UIViewAnimationCurveLinear // 匀速
*/
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
// 设置重复次数
[UIView setAnimationRepeatCount:MAXFLOAT]; // default = 0.0. May be fractional
// 设置是否自动返回,以动画的方式返回
[UIView setAnimationRepeatAutoreverses:YES]; // default = NO. used if repeat count is non-zero
// 设置是否从当前状态开始动画
[UIView setAnimationBeginsFromCurrentState:YES]; // default = NO
// 设置代理
[UIView setAnimationDelegate:self]; // default = nil
// 设置动画开始时执行的代理方法,自定义方法
[UIView setAnimationWillStartSelector:@selector(startAnimations)]; // default = NULL
// 设置动画结束时执行的代理方法,自定义方法
[UIView setAnimationDidStopSelector:@selector(stopAnimations)]; // default = NULL
// 动画之行后效果值
// 设置透明度,改变后的透明度
self.redView.alpha = 1.0;
// 改变控件的位置和尺寸,改变后的位置或大小
self.redView.frame = CGRectMake(150, 150, 80, 80);
// 结束一个动画块
[UIView commitAnimations];
// 动画开始时执行的代理方法,自定义方法
- (void)startAnimations {
NSLog(@"startAnimations");
}
// 动画结束时执行的代理方法,自定义方法
- (void)stopAnimations {
NSLog(@"stopAnimations");
}
// 开始一个动画块
[UIView beginAnimations:nil context:nil];
// 动画设置
// 设置动画时间
[UIView setAnimationDuration:1.0]; // default = 0.2
// 设置延时
[UIView setAnimationDelay:0.0]; // 设置指定的时间后开始执行动画,default = 0.0
// 设置动画执行节奏
/*
UIViewAnimationCurveEaseInOut, // slow at beginning and end 开始和结束慢速,默认
UIViewAnimationCurveEaseIn, // slow at beginning 开始慢速
UIViewAnimationCurveEaseOut, // slow at end 结束慢速
UIViewAnimationCurveLinear // 匀速
*/
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
// 设置重复次数
[UIView setAnimationRepeatCount:MAXFLOAT]; // default = 0.0. May be fractional
// 设置是否自动返回,以动画的方式返回
[UIView setAnimationRepeatAutoreverses:YES]; // default = NO. used if repeat count is non-zero
// 设置是否从当前状态开始动画
[UIView setAnimationBeginsFromCurrentState:YES]; // default = NO
// 设置代理
[UIView setAnimationDelegate:self]; // default = nil
// 设置动画开始时执行的代理方法,自定义方法
[UIView setAnimationWillStartSelector:@selector(startAnimations)]; // default = NULL
// 设置动画结束时执行的代理方法,自定义方法
[UIView setAnimationDidStopSelector:@selector(stopAnimations)]; // default = NULL
// 动画之行后效果值
// 设置透明度,改变后的透明度
self.redView.alpha = 1.0;
// 改变控件的位置和尺寸,改变后的位置或大小
self.redView.frame = CGRectMake(150, 150, 80, 80);
// 结束一个动画块
[UIView commitAnimations];
// 动画开始时执行的代理方法,自定义方法
- (void)startAnimations {
NSLog(@"startAnimations");
}
// 动画结束时执行的代理方法,自定义方法
- (void)stopAnimations {
NSLog(@"stopAnimations");
}
- 效果