Core Animation 官方文档第五章(高级动画技巧)

来源:互联网 发布:java sftp下载文件 编辑:程序博客网 时间:2024/06/02 22:56

总结:

1.动画有基于属性的动画(property-based),比如:hidden、alpha等属性;还有一种就是帧动画。帧动画提供的更多高级的动画,比如move、push等等。并且这些动画之间可以通过定时(Timing)使动画有执行的顺序,进行这些操作的方法和属性在 CAMediaTiming协议中,而 CAAnimation 和CALayer两个类已经遵循了该类,所以你可以直接操作。每一个layer都有一个本地定时系统,一般情况下两个layer的定时系统是相同的,这样两个动画一般都是同时进行的,但是这个可以手动去改(speed),实现有快有慢。convertTime:fromLayer: ;convertTime:toLayer:这两个方法可以获取某个layer的local time也可以把某个layer的local time转化给另一个layer,这样两个layer的动画可以绝对同步执行。需要注意的是fillMode需要设置一下( kCAFillModeBackwards),否则在执行动画之前会有一个跳帧。动画的暂停可以通过设置speed等于0.0,这个属性在CAMediaTiming协议中。动画的暂停与恢复:

-(void)pauseLayer:(CALayer*)layer {   CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];   layer.speed = 0.0;   layer.timeOffset = pausedTime;} -(void)resumeLayer:(CALayer*)layer {   CFTimeInterval pausedTime = [layer timeOffset];   layer.speed = 1.0;   layer.timeOffset = 0.0;   layer.beginTime = 0.0;   CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;   layer.beginTime = timeSincePause;}
2.修改layer的动画必须在显式事务(transaction)中进行,为什么有时候我们都是直接就改了也是可以的?因为当你在layer上加动画的时候,自动创建了事务。可以通过自己创建事务,更精确的管理动画。比如你想改变layer的属性:

[CATransaction begin];theLayer.zPosition=200.0;theLayer.opacity=0.0;[CATransaction commit];
为什么需要这个显式事务呢?因为有些属性需要在这里面管理,比如:duration, timing function。而这些属性的修改都是通过如下的形式修改的,你需要知道他们的key:

[CATransaction begin];[CATransaction setValue:[NSNumber numberWithFloat:10.0f]                 forKey:kCATransactionAnimationDuration];// Perform the animations[CATransaction commit];
需要注意的是,事务是可以嵌套的,只有在事务被提交之后,动画才会有效果。
3.Core Animation可以显示3维空间动画,但是为了简单起见,一般都把它平行投影成了2维的。这种情况使得具有不同zPosition的layer变成了相同的,因为我们职能看到x、y轴上的平面,不管你有多高投影完成之后都是一个平面。但是,这个是可以改的,改变它的变换矩阵以及投影方式,就会出现立体的效果。通过修改sublayerTransform变换矩阵来改变投影角度。改变superlayer的投影角度,所有sublayer会一起改变。


最后附上一个Core Animation中文链接:

https://www.gitbook.com/book/zsisme/ios-/details

0 0
原创粉丝点击