如何控制沿 NSBezier 路径的动画时间?
How do I control animation timing along a NSBezier path?
在 Apple 关于 CAKeyframeAnimation 的文档中,他们说:
"For most types of animations, you specify the keyframe values using
the values and keyTimes properties. During the animation, Core
Animation generates intermediate values by interpolating between the
values you provide. When animating a value that is a coordinate point,
such as the layer’s position, you can specify a path for that point to
follow instead of individual values. The pacing of the animation is
controlled by the timing information you provide."
我想做的是在控制时间的同时,沿着上面的路径制作一个图像的动画。更具体地说,路径从 (0,0) 开始,在 1 秒内到达 (100,0),然后沿着半圆路径在 3 秒内到达点 (300,0),最后到达点 (400, 0) 在 1 秒内。
我已经将这条路径定义为NSBezier路径,我可以制作动画,但我不知道如何控制路径不同部分的时间。从 Apple 的文档来看,这似乎是可行的,但如何实现?
从这里获取参考 Controlling Animation Timing
有一个简单的解决方案。您唯一需要选择的是路径上要用于时间控制的点。在我的例子中,我有 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。就这些,真的。
在 Apple 关于 CAKeyframeAnimation 的文档中,他们说:
"For most types of animations, you specify the keyframe values using the values and keyTimes properties. During the animation, Core Animation generates intermediate values by interpolating between the values you provide. When animating a value that is a coordinate point, such as the layer’s position, you can specify a path for that point to follow instead of individual values. The pacing of the animation is controlled by the timing information you provide."
我想做的是在控制时间的同时,沿着上面的路径制作一个图像的动画。更具体地说,路径从 (0,0) 开始,在 1 秒内到达 (100,0),然后沿着半圆路径在 3 秒内到达点 (300,0),最后到达点 (400, 0) 在 1 秒内。
我已经将这条路径定义为NSBezier路径,我可以制作动画,但我不知道如何控制路径不同部分的时间。从 Apple 的文档来看,这似乎是可行的,但如何实现?
从这里获取参考 Controlling Animation Timing
有一个简单的解决方案。您唯一需要选择的是路径上要用于时间控制的点。在我的例子中,我有 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。就这些,真的。