1、CAAnimation是IOS QuartzCore框架下一个抽象类,遵循了CAMediaTiming协议和CAAction协议!我们不直接使用CAAnimation类,而是使用其子类:
CATransition:提供渐变效果,如推拉push效果,消退fade效果,揭开reveal效果
CAAnimationGroup:允许多个动画同时播放
CABasicAnimation: 提供了对单一动画的实现
CAKeyframeAnimation: 关键桢动画,可以定义动画路线
CAPropertyAnimation:属性动画,通常不直接使用,而是使用CABasicAnimation子类
从上面可以看出CABasicAnimation与CAKeyframeAnimation都继承于CAPropertyAnimation。而CAPropertyAnimation提供了基本的动画属性设置keyPath、additive、cumulative
2、详解
1)CABasicAnimation
CABasicAnimation提供了最基础的动画属性设置,是简单的keyframe动画性能。CABasicAnimation可以看做是一种CAKeyframeAnimation的简单动画,因为它只有头尾的关键帧(keyframe)。
我们可以创建一个CABasicAnimaiton的对象通过keyPath的方式。CABasicAnimation提供了fromValue、toValue、byValue的设置(插值)。它们三个属性定义了一个动画的轨迹,并且最少两个值不能为空。通常创建CABasicAnimation对象用 如下方法
+ (instancetype)animationWithKeyPath:(nullable NSString *)path;
其中path的值相当于我们设定了这是个什么类型的动画,如下表格列出了常用属性:
当设置了CABasicAnimation的起点与终点值后,中间的值都是通过插值方式计算出来的,插值计算是通过timingFunction来指定,timingFunction默认为空,使用liner(匀速运动)。例如,当我们设置了一个position的动画,设置了开始值PointA与结束值PointB,它们的运动先计算PointA与PointB的中间运动值PointCenter,而PointCenter是由timingFunction来指定值的,并且动画默认是直线匀速运动的。
2)CAKeyFrameAnimation
CAKeyframeAnimation提供了通用的keyframe动画功能层的属性给我们使用,它允许我们设置一个特定的数组,这个数组是动画在运动时的值。也就是说,CAKeyframeAnimation支持动画的多个值设置。
CAKeyFrameAnimation可以用两种方法定义:CGPath、数组values。
CGPath只对layer的anchorPoint或position属性起作用。values比较灵活。keyTimes是一个可选参数,它可以定
义keyframe的每个部分,其值是0.0到1.0。keyTimes数组中的每个时间值都对应values中的每一帧,当keyTimes没有设置的
时候,各个keyframe的时间是平分的。keyTimes数组中的每个元素定义了相应的keyframe的持续时间值作为动画的总持续时间的一小部
分,每个元素的值必须大于、或等于前一个值。
3.区别于联系
1)CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation
4、案例制作
如下案例将几种常用动画做了封装,如:闪烁效果、横纵向移动、缩放效果、路径动画、旋转动画、组合动画,其中组合动画就是将其它效果动画集成在一起。
3、CADisplayLink
CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。我们在应用中创建一个新的CADisplayLink对象,把它添加到一个runloop中,并给它提供一个target和selector在屏幕刷新的时候调用。
CADisplayLink配合简单的动画效果,可以做出较为魔性的动画::::::
4、简单时钟动画效果
之前一直想做,但都不知道从何下手,直到我看到了别人的代码。。。
然后优化了一点点,分针能随着秒针变化而变化,时针随着分针变化而变化
网友评论