【问题标题】:How do I control animation timing along a NSBezier path?如何控制沿 NSBezier 路径的动画时间?
【发布时间】:2017-08-09 20:44:02
【问题描述】:

在 Apple 关于 CAKeyframeAnimation 的文档中,他们说:

"对于大多数类型的动画,您可以使用以下方式指定关键帧值 values 和 keyTimes 属性。动画期间,Core 动画通过在 您提供的值。当动画一个坐标点的值时, 例如图层的位置,您可以指定该点的路径 遵循而不是个人价值观。动画的节奏是 由您提供的时间信息控制。”

我想做的是在控制时间的同时沿着上面的路径制作图像的动画。更具体地说,路径从 (0,0) 开始,在 1 秒内到达 (100,0),然后在 3 秒内沿着半圆路径到达点 (300,0),然后到达点 (400, 0) 在 1 秒内。

我已经将这条路径定义为 NSBezier 路径,我可以制作动画,但我不知道如何控制路径不同部分的时间。从 Apple 的文档看来,这应该是可能的,但是如何实现呢?

【问题讨论】:

    标签: objective-c quartz-core cakeyframeanimation nsbezierpath


    【解决方案1】:

    从这里获取参考Controlling Animation Timing

    【讨论】:

    • 感谢您提供指向这篇非常好的文章的链接 :)。但是它没有回答我的问题。
    【解决方案2】:

    有一个简单的解决方案。您唯一需要选择的是路径上要用于时间控制的点。就我而言,我有 4 个点 p0=(0,0)、p1=(100,0)、p2 =(200,0) 和 p3 =(300,0)。然后我使用

    animation.values = @[[NSValue valueWithPoint:p0],
                                   [NSValue valueWithPoint:p1],
                                   [NSValue valueWithPoint:p2],
                                   [NSValue valueWithPoint:p3]];
    
    animation.keyTimes = @[@0.0, @0.2, @0.8, @1.0];
    

    我们使用半圆(或任何其他复杂的)路径这一事实没有任何影响(只要它不与自身交叉)。您只需选择路径上的一些点,使用它们定义animation.values,然后为这些点选择(相对)时间并使用它们定义animation.keyTimes。就是这样,真的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多