正如上一篇文章(Here)中详细描述的那样,我正在创建一个从初始角度开始并移动到结束角度的动画。我决定对这个动画使用CADisplayLink,因为动画需要在用户输入时尽可能快地运行,所以带有CAKeyframeAnimation的CALayer看起来太慢了。
在实现了调用setNeedsDisplay的CADisplayLink之后,我确实让动画工作了,但它看起来真的很糟糕,因为它将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,所以我希望从initialAngle到endAngle的动画需要3.0秒。我通过计算2*M_PI / kNumAnglesInAnimation将整个圆(2*M_PI弧度)分成相等的部分,最好是在每一帧中设置其中一个角度的动画,但不知何故我仍然必须考虑kDrawDuration和elapsedTime,我只是看不到如何实现。
谢谢你帮我解决这个问题!
发布于 2013-06-25 00:59:46
CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;不要跟踪"animationProgress“。elapsedTime是正确设置动画所需的全部内容。因此,只需删除它并使用:
CGFloat newAngleToAnimate = ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;
https://stackoverflow.com/questions/17279839
复制相似问题