Cocoa 我可以在CALayer中设置NSBezierPath的动画吗?

Cocoa 我可以在CALayer中设置NSBezierPath的动画吗?,cocoa,core-animation,quartz-graphics,Cocoa,Core Animation,Quartz Graphics,我已经阅读了苹果公司的核心动画烹饪书和核心动画编程指南,但我不太清楚其中的一些细节 我总是必须为一个完整的CALayer制作动画,还是可以为CALayer中的内容制作动画 如果我在一个层中绘制了一个NSBezierPath,并且我想将其设置动画/移动到另一个位置,我该如何做?你能给我举一个这样的例子吗?通常,你会将CALayer作为一个整体制作动画,以获得最佳性能。如果您所要做的只是移动贝塞尔路径的位置,则只需设置CALayer的位置或帧属性的动画即可 如果要更改向量路径的形状,我建议查看新的C

我已经阅读了苹果公司的核心动画烹饪书和核心动画编程指南,但我不太清楚其中的一些细节

我总是必须为一个完整的CALayer制作动画,还是可以为CALayer中的内容制作动画


如果我在一个层中绘制了一个NSBezierPath,并且我想将其设置动画/移动到另一个位置,我该如何做?你能给我举一个这样的例子吗?

通常,你会将CALayer作为一个整体制作动画,以获得最佳性能。如果您所要做的只是移动贝塞尔路径的位置,则只需设置CALayer的
位置
属性的动画即可

如果要更改向量路径的形状,我建议查看新的CAShapeLayer,在该层中,可以使用层上的
path
属性在一个CGPath和另一个CGPath之间设置动画。Joe Ricioppo提供了一些示例代码,您可以查看这些代码


除此之外,如果要更新层的内容,而不是其基本属性(如位置、比例、旋转等),则需要重新绘制层。

通常,您会将CALayer作为一个整体设置动画,以获得最佳性能。如果您所要做的只是移动贝塞尔路径的位置,则只需设置CALayer的
位置
属性的动画即可

如果要更改向量路径的形状,我建议查看新的CAShapeLayer,在该层中,可以使用层上的
path
属性在一个CGPath和另一个CGPath之间设置动画。Joe Ricioppo提供了一些示例代码,您可以查看这些代码


除此之外,如果你想更新图层的内容,而不是它的基本属性,如位置、比例、旋转等,你需要重新绘制图层。

因此,如果我想有多个形状并单独(或分组)设置动画,那么每个形状都应该在自己的CALayer上,然后我会设置每个CALayer的动画?@Neigaard-是,这就是我们的建议。合成层远比重绘层快。想想过去的卡通动画师们是如何重复使用CEL的,这样他们就可以在有限的预算下制作节目。在Mac电脑上,你可以一次在屏幕上有数百个这样的层,甚至在原始的iOS设备上,你也可以有50个这样的层以30-60 FPS的速度进行动画制作。因此,如果我想有多个形状并单独(或分组)进行动画制作,每个形状都应该在自己的CALayer上,然后我会为每个CALayer设置动画?@Neigaard-是的,这是推荐的。合成层远比重绘层快。想想过去的卡通动画师们是如何重复使用CEL的,这样他们就可以在有限的预算下制作节目。在Mac电脑上,你可以一次在屏幕上显示数百个这样的图层,甚至在原始型号的iOS设备上,你也可以让其中50个以30-60 FPS的速度进行动画制作。