首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳跃CADisplayLink动画

跳跃CADisplayLink动画
EN

Stack Overflow用户
提问于 2013-06-24 23:57:57
回答 1查看 579关注 0票数 0

正如上一篇文章(Here)中详细描述的那样,我正在创建一个从初始角度开始并移动到结束角度的动画。我决定对这个动画使用CADisplayLink,因为动画需要在用户输入时尽可能快地运行,所以带有CAKeyframeAnimationCALayer看起来太慢了。

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

代码语言:javascript
复制
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 / kNumAnglesInAnimation将整个圆(2*M_PI弧度)分成相等的部分,最好是在每一帧中设置其中一个角度的动画,但不知何故我仍然必须考虑kDrawDurationelapsedTime,我只是看不到如何实现。

谢谢你帮我解决这个问题!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-25 00:59:46

代码语言:javascript
复制
CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;

不要跟踪"animationProgress“。elapsedTime是正确设置动画所需的全部内容。因此,只需删除它并使用:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17279839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档