CALayer委托触发器如何显示自定义属性的更新(动画期间)?

时间:2015-07-15 04:12:55

标签: ios macos core-animation

CALayer似乎几乎在运行时向层添加属性所需的一切,无需使用委托和/或图层的actions属性进行子类化。但是,我还没想到的一件事是,当动画中的一个动态属性发生变化时,如何触发显示更新。

我知道在CALayer的自定义子类中如何做到这一点:只需在子类中定义属性,标记它们@dynamic,然后覆盖needsDisplayForKey:并返回YES自定义属性。然后在动画期间调用display,默认情况下甚至会触发对图层委托的drawLayer:inContent:方法的调用(如果存在的话)(尽管它有用,但鉴于你已经得到了这个您可以在其中实现drawInContext:)的子类。但是,我试图在没有子类化CALayer的情况下看看是否可行。

通过在图层的CAAction属性中安装actions或在图层委托中实施actionForLayer:forKey:,我可以仅使用图层委托来支持动画之外的更新。并使该操作向该层发送setNeedsDisplay消息。但是,actionForKey:显然在动画期间没有被调用(有意义,因为它用于触发隐式动画),并且在层委托协议中没有等效于needsDisplayForKey:,我可以看到。

那么,除了上述内容之外,有没有办法告诉CALayer为自定义属性调用display?或者是否无法仅在图层委托中实现可动画的自定义图层属性?看起来Apple似乎更喜欢在可能的情况下使用委托,但是如果没有在动画期间刷新图层内容的方法,则委托界面是不完整的。有什么建议吗?

0 个答案:

没有答案