core animation初识之属性动画

来源:互联网 发布:java编程面试题 编辑:程序博客网 时间:2024/05/17 04:38

属性动画由CAPropertyAnimation代表,该对象用于控制CALayer的动画属性(所有支持数值型属性值的属性几乎都可作为动画属性)持续改变,当CALayer的动画属性持续改变时,CALayer的外观就会持续改变——用户看上去就变成了动画。
CAPropertyAnimation提供了如下类方法来创建属性动画。
+(id)animationWithKeyPath:(NSString *)keyPath:该方法仅需要一个参数,该参数只是一个字符串类型的值,指定CALayer的动画属性名,设置该属性动画控制CALayer的哪个动画属性持续改变。
除此之外,CAPropertyAnimation还支持如下属性。
keyPah: 该属性值返回创建CAPropertyAnimation时指定的参数。
additive: 该属性指定该属性动画是否以当前动画效果为基础。
cumulative: 该属性指定动画是否为累加效果
valueFunction: 该属性值是一个CAValueFunction对象,该对象负责对属性改变的差值计算。系统提供了默认的差值计算方式,因此一般无须指定该属性。
如果要控制CALayer的位移动画,直接使用属性动画控制CALayer的position持续改变即可。如果要控制该CALayer的缩放,旋转,斜切等效果,则需要控制如下属性。
affineTransform: 该属性指定一个CGAffieTransform对象(就是本章介绍饿变换矩阵),该对象代表对CALayer执行X,Y两个维度(也就是平面)上的旋转,缩放,位移,斜切,镜像等变换矩阵。
transform: 该属性值指定一个CATransform3D对象,该对象代表对CALayer执行X,Y,Z三个维度(也就是三维空间)中的旋转,缩放,位移,斜切,镜像等变换矩阵。
很明显,如果只是对CALayer执行平面上的变换,指定普通的affineTransform属性即可。如果要对CALayer执行三维空间的变化,则需要指定transform属性。
一般来说,可使用Core Animation提供的如下函数来创建三维变换矩阵。CATransform3DIsIdentity(CATransform3D t):判断t矩阵是否为单位矩阵。
这里写图片描述
CATransform3DEqualTransorm(CATranform3D a,CATransform3D b):判断两个变换矩阵是否相等。
CATransform3DMakeTranslation(GFloat tx,CGFloat ty,CGFloat tz):创建在X方向上移动tx,Y方向上移动ty,Z方向上移动tz的变换矩阵。
CATransform3DMakeScale(CGFloat sx,CGFloat sy,CGFloat sz):创建在X方向上缩放sx,Y方向上缩放sy,Z方向上缩放sz的变换矩阵。
CATransform3DMakeRotation(CGFloat angle,CGFloat x,CGFloat y,CGFloat z):创建基于指定旋转angle弧度的变换,其中参数x,y,z的值用于确定旋转轴的方向。比如(1,0,0)指定旋转轴为X轴,(1,1,0)指定以X轴,Y轴夹角中线为旋转轴。
CATransform3DTranslate(CATransform3D t,CGFloat angle,CGFloat x,CGFloat y,CGFloat z):以已有t变换矩阵为基础进行位移变换。
CATransform3DScale(CATransform3D t,CGFloat sx,CGFloat sy,CGFloat sz):以已有的t变换矩阵为基础执行缩放变换。
CATransform3DRotate(CATransform3D t,CGFloat x,CGFloat y,CGFloat z):以已有 的t变换矩阵为基础执行旋转变换。
CATransform3Dconcat(CATransform3D a,CATransform3D b):对a矩阵执行累加。
CATransform3DInvert(CATransfrom3D t):对已有的t变换矩阵执行反转。
CATransform3DMakeAffineTransform(CGAffineTransform m):将CGAffineTransform矩阵包装成CATransform3D变换矩阵,该CATransform3D也只有X,Y维度的变换。
CATransform3DIsAffine(CATransform3D t):如果t变换矩阵只是一个CGAffineTransform矩阵,则该函数返回YES。
CATransform3DGetAffineTransform(CATransform3D t):获取t变换矩阵所包含的CGAffineTranform变换矩阵。
使用属性动画控制CALaye的步骤如下。
1,利用animationWithKeyPath类方法创建属性动画。
2,如果使用CABasicAnimation属性动画,则可指定fromValue,toValue两个属性值,其中,fromValue指定动画属性开始时的属性值,toValue指定动画属性结束时的属性值;如果使用CAKeyFrameAnimation属性动画,则指定values属性值,该属性值是一个NSArray属性,其中第一个元素指定动画开始时的属性值,toValue指定动画属性结束时的属性值,其他数组元素指定动画变化过程中的属性值。如果有需要,还可以指定其他动画属性。
这里写图片描述
调用CALayer的addAnimation:forKey:添加动画即可。
CALayer为动画支持提供了如下方法。
-addAnimation:forKey: 为该CALayer添加一个动画,第二个参数为该动画指定key(相当于该动画的唯一标识,这样保证每个CALayer可绑定多个动画对象)。
-animationForKey: 控制该CALayer执行指定key所对应的动画。
-removeAllAnimation: 删除该CALayer 上添加的所有动画。
-removeAnimationForKey: 根据key删除该CALayer上指定的动画。
animationKeys: 获取该CALayer上添加的所有动画key所组成的数组。

0 0
原创粉丝点击