您的位置:首页 > 移动开发 > IOS开发

[IOS]CoreAnimation基础[翻译6部分]

2015-08-22 00:36 316 查看
改变图层的默认特性
CA使用action对象实现其隐示动画特性。action对象就是一个遵循CAAction协议并且定义了某些动画特性的对象。所有的CAAnimation对象都实现了CAAction协议,图层的某些属性改变了,这些对象就会被赋值。
动画属性就是action的一种,你几乎可以以任何特性来定义这些action。为了实现动画,你得定义你的action对象,然后将他们关联进图层。

实现CAAction协议来定制action对象
创建你自己的action对象,然后实现CAAcion协议。然后实现该协议的runActionForKey:object:arguments方法。在该方法中,当想要在图层上产生动画时,提供必要的信息。你可能会用该方法来添加动画对象,或者进行某些任务。
当你定义action对象时,你必须决定什么时候触发该action。action的触发定义了你之后注册该action的key。action对象可以被以下几种情况触发:
1.图层的某一属性改变。这些属性可以不是那些可产生动画的属性。识别该action的key就是属性名。
2.图层变得可见或者被添加进图层层次。识别该action的key就是kCAOnOrderIn。
3.当图层被从图层层次中移除,识别key就是kCAOnOrderOut。
4.图层将要进行一些过渡动画,识别key就是kCATransition。

Action对象只有被关联图层才生效
在一个action被执行时,图层需要找到对应的action对象。与图层关联的action的key要么是被修改的属性名,要么是特殊的string。当触发条件满足时,图层调用actionForKey方法,并通过key搜索action对象。
CA查找action遵循以下原则:
1.如果图层有委托者实现了actionForLayer:forKey方法,那么图层就调用该方法。委托着必须完成之一:
1.返回响应key的action
2.如果没有该key,返回nil,然后继续搜索。
3.返回NSNull对象,这种情况下立即结束搜索。
2.在图层的actions 字典内查询
3.图层查询style字典
4.图层调用默认的defaultAction:ForKey类方法
5.图层进行CA定义的隐示动画。
如果你提供的action在以上任何一步中,图层停止搜索然后返回action对象。找到对象后,图层调用该对象的runActionForKey:object:arguments:方法执行action。如果你定义的action是CAAnimation类的实例,你就可以使用该方法的默认实现来进行动画。如果你所定义的对象遵循CAAction协议,你必须使用你对象的实现方法。
在哪里关联action取决于你如何修改图层
1.对于只用于特定环境的action,或者图层已经使用了委托者,提供其delegate然后实现actionForLayer:forKey方法
2.图层并未使用delegate,添加action进图层的actions字典。
3.对于action关联了图层上的自定义属性,添加action进图层的style字典。
4.对于是图层默认行为的action,继承该图层,然后重写其默认的defaultActionForKey:方法
6-1示例如何实现委托方法提供action,在该方法中委托者监测图层的contents属性改变,然后用过渡动画封装新contnent进图层

Listing 6-1 Providing an action using a layer delegate object

- (id<CAAction>)actionForLayer:(CALayer *)theLayer

forKey:(NSString *)theKey {

CATransition *theAnimation=nil;

if ([theKey isEqualToString:@"contents"]) {

theAnimation = [[CATransition alloc] init];

theAnimation.duration = 1.0;

theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

theAnimation.type = kCATransitionPush;

theAnimation.subtype = kCATransitionFromRight;

}

return theAnimation;

}


使用CATransaction类暂时的禁止Action
通过使用CATransaction类暂时的禁止掉Action。当改变图层属性时,CA自动创建隐示transaction对象来产生动画。如果你不想产生动画,通过显示的创建transaction然后设置其的kCATransactionDisableActions属性为YES。如6-2所示,当从特定的图层树中移除图层并禁止了动画。
Listing 6-2 Temporarily disabling a layer’s actions
[CATransaction begin];

[CATransaction setValue:(id)kCFBooleanTrue

forKey:kCATransactionDisableActions];

[aLayer removeFromSuperlayer];

[CATransaction commit];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: