美文网首页
iOS Core Animation(核心动画基础篇)

iOS Core Animation(核心动画基础篇)

作者: Michael1 | 来源:发表于2017-08-24 16:22 被阅读110次

基本概念

1. 什么是核心动画

Core Animation(核心动画)是一组功能强大、效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用

图2.png
由上图可以看出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的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimationCAKeyframeAnimation

  • 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 动画结算时间 返回弹簧动画到停止时的估算时间,根据当前的动画参数估算 通常弹簧动画的时间使用结算时间比较准确

相关文章

网友评论

      本文标题:iOS Core Animation(核心动画基础篇)

      本文链接:https://www.haomeiwen.com/subject/sbcedxtx.html