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

来源:互联网 发布:猎手软件下载 编辑:程序博客网 时间:2024/05/17 04:30

改变图层的默认特性

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];


0 0
原创粉丝点击