[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];
- [IOS]CoreAnimation基础[翻译6部分]
- [IOS]CoreAnimation基础[翻译1部分]
- [IOS]CoreAnimation基础[翻译2部分]
- [IOS]CoreAnimation基础[翻译3部分]
- [IOS]CoreAnimation基础[翻译4部分]
- [IOS]CoreAnimation基础[翻译5部分]
- iOS CoreAnimation 基础动画CABasicAnimation
- iOS-CoreAnimation基础(一)
- iOS-CoreAnimation基础(二)
- CoreAnimation基础
- iOS人机界面指南(界面设计基础部分)ISUX原创翻译
- iOS CoreAnimation
- iOS CoreAnimation
- ios CoreAnimation
- iOS CoreAnimation
- iOS CoreAnimation
- iOS CoreAnimation
- iOS CoreAnimation
- LeetCode Evaluate Reverse Polish Notation
- java中volatile关键字的含义
- git——OS X创建仓库以及链接github
- table表格css样式
- 兄弟间的事,筹栎间的那点事
- [IOS]CoreAnimation基础[翻译6部分]
- 摩天大厦不可伸缩
- HDOJ5256 序列变换(dp)
- 黑马程序员——021——IO流⑥(DataStream、(字节、字符)数组、字符串流对象、转换流)
- 黑马程序员——022——反射
- 202 Happy Number
- 黑马程序员——023——hashCode方法与HashSet类
- 黑马程序员——024——网络编程①
- HDU 5416 CRB and Tree(dfs 异或逆运算)