CAAction
协议似乎记录不清,很少在书籍和博客中发表评论。其唯一方法runActionForKey:object:arguments:
的论据有点神秘。根据我的经验,“对象”参数似乎总是CALayer
,而“参数”字典总是nil
。
似乎协议可能被设计为在Core Animation中的多个位置使用,否则为什么不定义层参数的类型,为什么有从未使用过的额外字典?但据我所知,它只与CALayer
一起使用。那是对的吗?有没有人有任何上述结论不正确的例子?
答案 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的主要底层)。
有关动作搜索机制的完整说明,请参阅我的书: