0

如前一篇文章 ( Here ) 中所述,我正在创建一个从初始角度开始并移动到结束角度的动画。我决定使用CADisplayLink这个动画,因为动画需要在用户输入期间尽可能快地运行,所以CALayeraCAKeyframeAnimation似乎实现这一点太慢了。

在实现CADisplayLink调用之后setNeedsDisplay,我确实让动画工作了,但它看起来真的很糟糕,因为它将 endAngle 和 initialAngle 之间的差异分成非常明显的角度块,而不是创建从一个角度到下一个角度的连续流动。这是我拥有的当前代码:

CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;

// Use newAngleToAnimate to draw in drawInContext

animationProgress = newAngleToAnimate; // Update the progress for the next frame.

另外,kDrawDuration定义为3.0f,所以我希望动画从initialAngleendAngle需要 3.0 秒。我通过计算将整个圆(2*M_PI弧度)分成相等的部分2*M_PI / kNumAnglesInAnimation,最好我想为每帧动画其中一个角度,但不知何故,我仍然必须考虑kDrawDurationelapsedTime考虑到这一点,我只是不知道如何实现。

感谢您提供解决此问题的任何帮助!

4

1 回答 1

1
CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;

不要跟踪“动画进度”。您的 elapsedTime 是您使动画正确所需的全部。所以只需删除它并使用:

CGFloat newAngleToAnimate = ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;

于 2013-06-24T16:59:46.467 回答