BeziaPath 、CAShapLayer、CAAnimation

主要讲解使用贝塞尔曲线来绘制不规则图形、动画展示。

BeziaPath 、CAShapLayer、CAAnimation_第1张图片

1.基本概念

核心动画作用在CALayer(Core animation layer)上,CALayer从概念上类似UIView,我们可以将UIView看成是一种特殊的CALayer(可以响应事件)。给view加上动画,本质上是对其layer进行操作,layer包含了各种支持动画的属性,动画则包含了属性变化的值、变化的速度、变化的时间等等,两者结合产生动画的过程。

核心动画和UIView动画的对比:UIView动画可以看成是对核心动画的封装,和UIView动画不同的是,通过核心动画改变layer的状态(比如position),动画执行完毕后实际上是没有改变的(表面上看起来已改变)。

总体来说核心动画的优点有:

1)性能强大,使用硬件加速,可以同时向多个图层添加不同的动画效果

2)接口易用,只需要少量的代码就可以实现复杂的动画效果。

3)运行在后台线程中,在动画过程中可以响应交互事件(UIView动画默认动画过程中不响应交互事件)。

2.核心动画类的层次结构

CAAnimation是所有动画对象的父类,实现CAMediaTiming协议,负责控制动画的时间、速度和时间曲线等等,是一个抽象类,不能直接使用。

CAPropertyAnimation :是CAAnimation的子类,它支持动画地显示图层的keyPath,一般不直接使用。

iOS9.0之后新增CASpringAnimation类,它实现弹簧效果的动画,是CABasicAnimation的子类。

综上,核心动画类中可以直接使用的类有:

CABasicAnimation

CAKeyframeAnimation

CATransition

CAAnimationGroup

CASpringAnimation

3.核心动画使用步骤

1.初始化CAAnimation对象


2.设置动画的相关属性

设置动画的执行时间,执行曲线,keyPath的目标值,代理等等

主要记录一下keyPath和其value:

TheCAAnimationandCALayerclasses are key-value coding compliant container classes, which means that you can set values for arbitrary keys. Even if the keysomeKeyis not a declared property of theCALayerclass, you can still set a value for it as follows:

[theLayer setValue:[NSNumber numberWithInteger:50] forKey:@"someKey"];

You can also retrieve the value for arbitrary keys like you would retrieve the value for other key paths. For example, to retrieve the value of thesomeKeypath set previously, you would use the following code:

someKeyValue=[theLayer valueForKey:@"someKey"];

BeziaPath 、CAShapLayer、CAAnimation_第2张图片
keypath

如:CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];


3.动画的添加和移除

调用CALayer的addAnimation:forKey:方法将动画添加到CALayer中,这样动画就开始执行了

- (void)addAnimation:(CAAnimation*)anim forKey:(nullableNSString*)key;

调用CALayer的removeAnimation方法停止CALayer中的动画

- (void)removeAnimationForKey:(NSString*)key; - (void)removeAllAnimations;

你可能感兴趣的:(BeziaPath 、CAShapLayer、CAAnimation)