CALayer
似乎几乎在运行时向层添加属性所需的一切,无需使用委托和/或图层的actions
属性进行子类化。但是,我还没想到的一件事是,当动画中的一个动态属性发生变化时,如何触发显示更新。
我知道在CALayer
的自定义子类中如何做到这一点:只需在子类中定义属性,标记它们@dynamic
,然后覆盖needsDisplayForKey:
并返回YES
自定义属性。然后在动画期间调用display
,默认情况下甚至会触发对图层委托的drawLayer:inContent:
方法的调用(如果存在的话)(尽管它有用,但鉴于你已经得到了这个您可以在其中实现drawInContext:
)的子类。但是,我试图在没有子类化CALayer的情况下看看是否可行。
通过在图层的CAAction
属性中安装actions
或在图层委托中实施actionForLayer:forKey:
,我可以仅使用图层委托来支持动画之外的更新。并使该操作向该层发送setNeedsDisplay
消息。但是,actionForKey:
显然在动画期间没有被调用(有意义,因为它用于触发隐式动画),并且在层委托协议中没有等效于needsDisplayForKey:
,我可以看到。
那么,除了上述内容之外,有没有办法告诉CALayer
为自定义属性调用display
?或者是否无法仅在图层委托中实现可动画的自定义图层属性?看起来Apple似乎更喜欢在可能的情况下使用委托,但是如果没有在动画期间刷新图层内容的方法,则委托界面是不完整的。有什么建议吗?