【问题标题】:Can I animate an NSBezierPath within a CALayer?我可以在 CALayer 中为 NSBezierPath 设置动画吗?
【发布时间】:2011-02-17 14:17:05
【问题描述】:

我已经阅读了 Apple 的 Core Animation Cook Book 和 Core Animation Programming Guide,但我不太确定其中的一些细节。

我是否总是必须为完整的 CALayer 制作动画,或者我可以在 CALayer 中制作动画?

如果我在一个图层中绘制了一个 NSBezierPath,并且我想将它动画化/移动到另一个位置,我该怎么做?有没有这样的例子可以指点我?

【问题讨论】:

    标签: cocoa core-animation quartz-graphics


    【解决方案1】:

    通常,您会为整个 CALayer 设置动画以获得最佳性能。如果您只想移动贝塞尔路径的位置,您可以简单地为 CALayer 的 positionframe 属性设置动画。

    如果您想更改矢量路径的形状,我建议您查看新的 CAShapeLayer,您可以在其中使用图层上的 path 属性在一个 CGPath 和另一个 CGPath 之间进行动画处理。 Joe Ricioppo 有一些示例代码,您可以查看此here

    除此之外,如果要更新图层的内容,而不是位置、缩放、旋转等基本属性,则需要重绘图层。

    【讨论】:

    • 因此,如果我想拥有多个形状并独立(或分组)为它们设置动画,那么每个形状都应该在自己的 CALayer 上,然后我将为每个 CALayer 设置动画?
    • @Neigaard - 是的,这就是我们推荐的。图层的合成比重绘要快得多。想想过去的卡通动画师是如何重复使用 cels 的,这样他们就可以在有限的预算下制作节目。在 Mac 上,您可以同时在屏幕上显示数百个此类图层,甚至在原始型号的 iOS 设备上,您也可以让其中的 50 个图层以 30-60 FPS 的速度进行动画处理。
    猜你喜欢
    • 2011-04-25
    • 2012-03-08
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多