close
当前位置: 物联网在线 > 技术文库 > ios >

iOS动画详解

iOS动画详解

CAAnimation.png

二、CABasicAnimation

1. 动画的属性和解释

iOS动画详解

2.属性值的解释

repeatCount : 如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF

timingFunction:

iOS动画详解

kCAMediaTimingFunctionLinear --在整个动画时间内动画都是以一个相同的速度来改变。也就是匀速运动。一个线性的计时函数,同样也是CAAnimation的timingFunction属性为空时候的默认函数。线性步调对于那些立即加速并且保持匀速到达终点的场景会有意义(例如射出枪膛的子弹)。

kCAMediaTimingFunctionEaseIn: 动画开始时会较慢,之后动画会加速。一个慢慢加速然后突然停止的方法。对于之前提到的自由落体的例子来说很适合,或者比如对准一个目标的导弹的发射。

kCAMediaTimingFunctionEaseOut: 动画在开始时会较快,之后动画速度减慢。它以一个全速开始,然后慢慢减速停止。它有一个削弱的效果,应用的场景比如一扇门慢慢地关上,而不是砰地一声。

kCAMediaTimingFunctionEaseInEaseOut: 动画在开始和结束时速度较慢,中间时间段内速度较快。创建了一个慢慢加速然后再慢慢减速的过程。这是现实世界大多数物体移动的方式,也是大多数动画来说最好的选择。如果只可以用一种缓冲函数的话,那就必须是它了。那么你会疑惑为什么这不是默认的选择,实际上当使用UIView的动画方法时,他的确是默认的,但当创建CAAnimation的时候,就需要手动设置它了。

kCAMediaTimingFunctionDefault: 它和kCAMediaTimingFunctionEaseInEaseOut很类似,但是加速和减速的过程都稍微有些慢。它和kCAMediaTimingFunctionEaseInEaseOut的区别很难察觉,可能是苹果觉得它对于隐式动画来说更适合(然后对UIKit就改变了想法,而是使用kCAMediaTimingFunctionEaseInEaseOut作为默认效果),虽然它的名字说是默认的,但还是要记住当创建显式的CAAnimation它并不是默认选项(换句话说,默认的图层行为动画用kCAMediaTimingFunctionDefault作为它们的计时方法)。

使用方法:

pathAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)

fillMode

iOS动画详解

kCAFillModeForwards: 动画开始之后layer的状态将保持在动画的最后一帧,而removedOnCompletion的默认属性值是 YES,所以为了使动画结束之后layer保持结束状态,应将removedOnCompletion设置为NO。

kCAFillModeBackwards: 将会立即执行动画的第一帧,不论是否设置了 beginTime属性。观察发现,设置该值,刚开始视图不见,还不知道应用在哪里。

kCAFillModeBoth: 该值是 kCAFillModeForwards 和 kCAFillModeBackwards的组合状态

kCAFillModeRemoved: 动画将在设置的 beginTime 开始执行(如没有设置beginTime属性,则动画立即执行),动画执行完成后将会layer的改变恢复原状。

3.使用心得

尽量不要设置removedOnCompletion = false ,因为配合CAAnimationDelegate会带来循环运用的问题,如果需要动画停留在最后的状态,可以直接设置View的center属性在动画结束的位置Point

之所以会出现 循环引用 因为由于CAAnimation的delegate使用的strong类型:看一下简要的说明图:

iOS动画详解

解决有时视图会闪动一下的问题,我们可以将layer的属性值设置为我们的动画最后要达到的值,然后再给我们的视图添加layer动画。

4.样例展示

旋转动画

旋转动画.gif

位移动画

位移动画.gif

背景颜色变化动画、背景图片变化动画、圆角变化动画

动画集合-1.gif

比例缩放动画

比例缩放动画-1.gif

size大小缩放、透明值变化动画(可用作闪烁效果)

size大小缩放、透明值变化动画.gif

5.常用KeyPath总结

iOS动画详解

三、CAKeyframeAnimation

CAKeyframeAnimation是核心动画里面的帧动画,它提供了按照指定的一串值进行动画,好像拍电影一样的一帧一帧的效果

1.属性解释

values: 是许多值组成的数组用来进行动画的。这个属性比较特别,只有在path属性值为nil的时候才有作用

path:路径,可以指定一个路径,让动画沿着这个指定的路径执行。


(责任编辑:ioter)

用户喜欢...

倪凯首次详解Lelvel 3.5自动驾驶:是Level 4的降维,会更注重人机交互 | 创业者说

“所以总的来说,我认为L3.5是需要把一个准L4系统降为到L3来使用,但是它拥有更高的安全标准,同时它又适合量产。...


MIPS寄存器详解

MIPS有32个通用寄存器(0−31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 下面给以详细说明: 0:即zero,该寄存器总是返回零,为0这个有用常数提供...


详解PowerVR Wizard架构的光线追踪

作者:Simon Walton Imagination素以移动设备的芯片IP闻名,如智能手机和平板电脑,并在性能、功率及占用面积方面享有盛誉,且一直保有市场领先地位。为全方位发展,Imagination开发了与光线追...


一文详解VR定位追踪的原理与趋势

现在的移动VR已经不再像以前那样令人感到晕眩恶心。当然,现在我们尚不能实现跟Oculus Rift和PSVR相近的质量。但技术...


详解Oculus摄像头的运作原理及黑客攻击风险

此前有报道称Oculus的传感器可以用于拍摄图片,所以有人担心黑客或许可以从此入手,记录我们在虚拟世界中的一举...


单片机pwm控制基本原理详解

PWM是Pulse Width Modulation的缩写,它的中文名字是脉冲宽度调制,一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术,其实就是使用数字信号达到一个模拟信号的效...


运放关键参数如何测?详解在此,专家只能帮到这里咯

selina 在 周三, 07/05/2017 - 09:12 提交 运算放大器是差分输入、单端输出的极高增益放大器,常用于高精度模拟电路,因此必须精确测量其性能。但在开环测量中,其开环增益可能高达107或更高,...


详解FPGA电源设计的几个步骤

现场可编程门阵列(FPGA)被发现在众多的原型和低到中等批量产品的心脏。 FPGA的主要优点是在开发过程中的灵活性,简单的升级路径,更快地将产品推向市场,并且成本相对较低。一个主要...


CNN超参数优化和可视化技巧详解

在深度学习中,有许多不同的深度网络结构,包括卷积神经网络(CNN或convnet)、长短期记忆网络(LSTM)和生成对抗网络(GAN)等。 在计算机视觉领域,对卷积神经网络(简称为CNN)的研究和应用都取得...


详解深圳汽车分时租赁新政:要求严格,行业几乎被判“死刑”

深圳关于分时租赁汽车的新政,可能为这个刚刚开始发展的新兴产业添加了巨大阻碍。...