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

总结:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值