基本概念
1. 什么是核心动画
Core Animation
(核心动画)是一组功能强大、效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用
由上图可以看出
Core Animation
位于UIKit
的下一层,相比UIView
动画,它可以实现更复杂的动画效果以及更多可操作的动画属性。说到核心动画,就必须要知道
CALayer
,核心动画作用在CALayer,每个View都有其对用的layer,
@property(nonatomic,readonly,strong) CALayer *layer;
给UIView
添加动画本质上还是对layer进行的操作。当UIView
需要显示到屏幕上时,会调用drawRect:
方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView
的显示。
换句话说,UIView
本身不具备显示的功能,是它内部的层才有显示功能。
Core Animation
的优点:
- 运行在后台线程中,不会阻塞主线程。在动画过程中可以响应交互事件(UIView动画默认动画过程中不响应交互事件)。
- 接口易用,只需要少量的代码就可以实现复杂的动画效果。
- 性能强大,使用硬件加速,可以同时向多个图层添加不同的动画效果。
2. 核心动画中的类
核心动画中所有类都遵守CAMediaTiming协议。
常见的动画类:
CAAnaimation : 是个抽象类,不具备动画效果,必须用它的子类才有动画效果。
CAPropertyAnimation :是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:
CABasicAnimation
和CAKeyframeAnimation
。CABasicAnimation : 是CAPropertyAnimation的子类,支持一些简单的动画。
CAKeyframeAnimation : 是CApropertyAnimation的子类,可以创造帧动画。
CATransition : 是转场动画,界面之间跳转(切换)都可以用转场动画。
CAAnimationGroup :是 CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,可以同时进行缩放,旋转(同时进行多个动画)。
CASpringAnimation :是
CABasicAnimation
的子类, iOS9.0之后新增的类,它实现弹簧效果的动画。
基本属性说明:
属性 | 说明 |
---|---|
duration | 动画的持续时间 |
repeatCount | 重复次数,默认的是 0,动画只会播放一次,无限循环可以设置HUGE_VALF或者MAXFLOAT。这个不应该和 RepeatDuration 属性一块使用。 |
RepeatDuration | 重复时间, 这个属性指定了动画应该被重复多久。动画会一直重复,直到设定的时间用完。同上它不应该和 repeatCount 一起使用。 |
Autoreverses | 设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到开始的值,过渡平滑。 |
RemovedOnCompletion | 这个属性默认为 YES,在指定的时间段完成后,动画就自动的从层上移除了。 |
fillMode | 这个属性一般和 RemovedOnCompletion 配合使用,保持动画状态。其中kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态.此时将RemovedOnCompletion 设为NO。 |
BeginTime | 动画开始时间,可以用来设置动画延迟执行时间,若想延迟1s,就设置为CACurrentMediaTime()+1,CACurrentMediaTime()为图层的当前时间。 |
timingFunction | 控制动画运行的节奏. kCAMediaTimingFunctionLinear (线性):匀速,给你一个相对静态的感觉 kCAMediaTimingFunctionEaseIn (渐进):动画缓慢进入,然后加速离开 kCAMediaTimingFunctionEaseOut (渐出):动画全速进入,然后减速的到达目的地 kCAMediaTimingFunctionEaseInEaseOut (渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。 |
delegate | 动画代理 |
Speed | 速度,默认的值为 1.0.如果你改变这个值为 2.0,动画会用 2 倍的速度播放。这样的影响就是使持续时间减半。如果你指定的持续时间为 6 秒,速度为 2.0,动画就会播放 3 秒钟即一半的持续时间。 |
FromValue | 设置动画的初始值 |
ToValue | 设置动画的到达值 |
damping | 阻尼系数,阻止弹簧伸缩的系数,阻尼系数越大,停止越快 |
stiffness | 刚度系数(劲度系数/弹性系数),刚度系数越大,形变产生的力就越大,运动越快 |
mass | 质量,影响图层运动时的弹簧惯性,质量越大,弹簧拉伸和压缩的幅度越大 |
initialVelocity | 初始速率,动画视图的初始速度大小 速率为正数时,速度方向与运动方向一致,速率为负数时,速度方向与运动方向相反 |
settlingDuration | 动画结算时间 返回弹簧动画到停止时的估算时间,根据当前的动画参数估算 通常弹簧动画的时间使用结算时间比较准确 |