CAAction的runActionForKey可以是什么值:object:arguments:参数?

时间:2013-12-16 18:59:33

标签: ios macos core-animation quartz-core

CAAction协议似乎记录不清,很少在书籍和博客中发表评论。其唯一方法runActionForKey:object:arguments:的论据有点神秘。根据我的经验,“对象”参数似乎总是CALayer,而“参数”字典总是nil

似乎协议可能被设计为在Core Animation中的多个位置使用,否则为什么不定义层参数的类型,为什么有从未使用过的额外字典?但据我所知,它只与CALayer一起使用。那是对的吗?有没有人有任何上述结论不正确的例子?

2 个答案:

答案 0 :(得分:2)

不,CAAction尚未在任何其他API中使用。当协议被设计时,它被保留为通用的,以防以后变得有用,但什么都没有出现。

定义和调用自己的图层操作很简单。一个人为的例子可能是将“mouseDown”动作发送到经过测试的图层,传递某种特定于事件的数据:

CALayer *layer = myHitTest(…);
[[layer actionForKey:@“mouseDown”]
 runActionForKey:@“mouseDown” object:layer arguments:@{…}];

这里你不希望动作添加动画,所以会在处理事件的类上实现CAAction协议,然后将该类的实例放在图层的actions字典中

答案 1 :(得分:2)

CAAction的唯一实际用途是作为隐式动画的基础 - 也就是说,它是表达式的核心机制,如

myLayer.position = // ... whatever ...

神奇地能够动画层的位置变化(假设它不是UIView的主要底层)。

有关动作搜索机制的完整说明,请参阅我的书:

http://www.apeth.com/iOSBook/ch17.html#_actions_2