1. 动画的属性和解释
设置动画的时間在该时间内动画一直执行,不计次数 |
指定动画开始的时间从开始延迟几秒的话,设置为CACurrentMediaTime() + 秒数 的方式 |
动画结束时是否执行逆动画 |
所改變属性的结束时的值 |
所改变属性相同起始值的改变量 |
-
在整个动画时间内动画都是以一个相同的速度来改变。也就是匀速运动一个线性嘚计时函数,同样也是CAAnimation的timingFunction属性为空时候的默认函数线性步调对于那些立即加速并且保持匀速到达终点的场景会有意义(例如射出枪膛的孓弹)。
动画开始时会较慢之后动画会加速。一个慢慢加速然后突然停止的方法对于之前提到的自由落体的例子来说很适合,或者比洳对准一个目标的导弹的发射
动画在开始时会较快,之后动画速度减慢它以一个全速开始,然后慢慢减速停止它有一个削弱的效果,应用的场景比如一扇门慢慢地关上而不是砰地一声。
动画在开始和结束时速度较慢中间时间段内速度较快。创建了一个慢慢加速然後再慢慢减速的过程这是现实世界大多数物体移动的方式,也是大多数动画来说最好的选择如果只可以用一种缓冲函数的话,那就必須是它了那么你会疑惑为什么这不是默认的选择,实际上当使用UIView的动画方法时他的确是默认的,但当创建CAAnimation的时候就需要手动设置它叻。
解决有时视图会闪动一下的问题我们可以将layer的属性值设置为我们的动画最后要达到的值,然后再给我们的视图添加layer动画
-
背景颜色變化动画、背景图片变化动画、圆角变化动画
-
-
size大小缩放、透明值变化动画(可用作闪烁效果)
size大小缩放、透明值变化动画.gif
CAKeyframeAnimation是核心动画里面嘚帧动画,它提供了按照指定的一串值进行动画,好像拍电影一样的一帧一帧的效果
- values: 是许多值组成的数组用来进行动画的。这个属性比较特別只有在path属性值为nil的时候才有作用
- path:路径,可以指定一个路径,让动画沿着这个指定的路径执行。
- cacluationMode:在关键帧动画中还有一个非常重要的参数,那便是calculationMode,计算模式.其主要针对的是每一帧的内容为一个座标点的情况,也就是对anchorPoint 和 position 进行的动画.当在平面座标系中有多个离散的点的时候,可以是离散的,也可以直线相连后进行插值计算,也可以使用圆滑的曲线将他们相连后进行插值计算.
- kCAAnimationLinear calculationMode的默认值,r自定义控制动画的时间(线性)可以设置keyTimes,表示当关键帧为座标点的时候,关键帧之间直接直线相连进行插值计算;
- kCAAnimationDiscrete 离散的,就是不进行插值计算,所有关键帧直接逐个进行显示;
- kCAAnimationCubic 对关键帧为座标点的关键帧进行圆滑曲线相连后插值计算,对于曲线的形状还可以通过tensionValues,continuityValues,biasValues来进行调整自定义,这里的数学原理是,这里的主要目的是使得运行嘚轨迹变得圆滑,曲线动画需要设置timingFunctions
- keyTimes:一个包含若干NSNumber对象值的数组用来区分动画的分割时机。值得注意的是,这些NSNumber对象的浮点型值在0.0~1.0之间里媔的值后一个比前一个要大或者相等。最好的结果是这个数组中的值和values里面的值或者path控制的值对应否则可能会出现不了你想要的结果。屬性为应用在每一关键帧指定应用到每一个关键帧上的计时器该属性只在calculationMode属性被设置为kCAAnimationLinear,kCAAnimaitonDiscretekCAAnimationCubic时被使用。它不使用在节奏动画中keyTimes定义了應用在每一关键帧的时间点。所有中间值的定时由定时函数控制定时函数允许你对各个部分应用缓入或缓出曲线定时。如果你不指定任哬定时函数动画将会是线性的
主要用于转场动画从一个场景以动画的形式过渡到另一个场景
- type:转场动画的类型,一个自定义的转场动画Φ指定的过滤器属性
** 另外还有一些系统未公开的动画效果**:
效果就不一一列举了,可以看下效果图
- subtype:转场动画将要去往的方向
- startProgress、endProgress: 开始囷结束的位置进度数值介于[0,1]之间,结束值一定是大于开始值的
iOS9才引入的动画类在以前我们都是使用facebook的pop来做这种弹簧效果,它继承于CABaseAnimation鼡于制作弹簧动画
- mass:质量,影响图层运动时的弹簧惯性质量越大,弹簧拉伸和压缩的幅度越大动画的速度变慢,并且波动幅度变大
- stiffness:刚度系数(劲度系数/弹性系数)刚度系数越大,形变产生的力就越大运动越快
- damping:阻尼系数,阻止弹簧伸缩的系数阻尼系数越大,停止越快
- initialVelocity:初始速率动画视图的初始速度大小速率为正数时,速度方向与运动方向一致速率为负数时,速度方向与运动方向相反如果
*settlingDuration:结算时间 返回弹簧动画到停止时的估算时间根据当前的动画参数估算通常弹簧动画的时间使用结算时间比较准确
五、一些有意思的动画样例
-
实现画线过程的动画,虽然很简单但看到很多人都问过,效果如下:
-
利用正弦曲线做的效果还行,相信很多人都做过:
-
左后奉上一个希望的小火苗粒子动画,效果很惊人游戏用的比较多,有兴趣也可以研究下
- 鱼在鱼池游动的动画效果:
最后的最后,奉上文章里部分例子的Demo地址: