一 UIKIT层动画
- transform 实为映射,原位置不变,可以映射出平移,旋转,缩放
- contentStretch 可以设置拉伸区域
法一:用简单上下文实现
//开始创建动画,第一个参数可以看成动画的标识符,当有多个动画时可以用来区分,只有一个参数可以不设置,空参数为nil,第二个参数为上下文参数,空指针为NULL
[UIView beginAnimations:nil context:NULL];
//设置动画的时间,补充知识点:系统动画时间(比如点击文本框弹出键盘时间,或者界面切换时间,键盘弹出动画时间是可以通过通知获取的)大约为0.25~0.3
[UIView setAnimationDuration:0.3];
//设置动画曲线,有四种,线性,淡入,淡出,淡入淡出结合,一般系统动画都是淡入淡出
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//设置动画的终点
self.animationView.frame = CGRectMake(150, 200, 50, 50);
self.animationView.backgroundColor = [UIColor blueColor];
//提交动画,提交动画后系统会单独开辟一个线程运行动画生成的关键帧,所以动画是独立于主线程之外的,不会卡主线程
[UIView commitAnimations];
法二:用代码块实现(推荐)
1. [UIView animateWithDuration:3 animations:^{
}];
2. [UIView animateWithDuration:3 animations:^{
} completion:^(BOOL finished) {
}];;
3. //option参数是设置动画出现属性,如淡入淡出等
[UIView animateWithDuration:3 delay:1 options:UIViewAnimationOptionAutoreverse animations:^{
self.animationView.frame = CGRectMake(150, 200, 50, 50);
self.animationView.frame = CGRectMake(100, 100, 100, 100);
}];
二 CALayer层动画
CALayer对象中实际包含了一个表现层和一个模型层
1.模型层:是用来在内存中存储必要的图层信息。
2.表现层:是用来将图形层显示在屏幕上,并为此做了相应的优化。
(比如说做一个改变颜色的动画,原来是***,点击按钮后改成红色,开始时,模型层是***,点击按钮时模型层还是***,表现层变为红色)
- 隐式动画:用作动画的属性是在模型层中被修改的,然后通过表现层传递出来,并最终显示在屏幕上,效果为动画结束的样式,uikit中的动画效果都为隐式动画。
- 显示动画:进行动画的属性只存在表现层,而模型层的属性值保持不变,在动画结束后,CALayer对象会回到动画之前的状态,CoreAnimation框架中的动画都是显示动画,显示动画可以进一步提升动画性能
用layer时,在动画过程中,称动态layer,此时模型层和显示层不一定一致,动画结束后,变为静态layer,此时模型层和显示层一致