0

假设我的应用程序同时运行几十个动画,我想暂停它们,就好像这是一个游戏并且用户点击了暂停按钮。最好的方法是什么?我正在使用 CAKeyFrameAnimations、UIView.Animate()、CABasicAniamtions 等的组合。显然我可以在用户点击暂停时手动停止它们,并在用户取消暂停时从停止的位置恢复它们。但是有没有更好的方法来做到这一点?


编辑:我希望能够通过用户按下按钮来暂停和恢复。


第二次编辑:我已经完成了 90% 的路,但我仍然遇到问题......

这是我的 Xamarin iOS 项目: https ://www.dropbox.com/s/5zbhhao6cijtb1i/Test_Pause.zip

有用的苹果参考: https ://developer.apple.com/library/ios/qa/qa1673/_index.html

我有一个启动位置动画的应用程序。当我第一次暂停它时,它会正确暂停。当我点击恢复时,它会从暂停的地方正确恢复。但是,当您第二次再次点击暂停时(在同一动画期间),它会在一个位置恢复,就好像它从未暂停过一样。它停在它应该在的地方之前。当然,理想的结果是让它在您按下暂停按钮时准确地停在原处。

抱歉,如果这听起来令人困惑,我附上的示例项目非常简单,要重现问题,请从上面的链接下载我的应用程序。运行。确保在同一动画中暂停、恢复,然后再次暂停。知道我做错了什么吗?

4

3 回答 3

0

you can use a Boolean at the beginning of the drawing method, if the boolean is true (means no animation ) then it goes directly to the end

于 2013-10-17T15:23:19.863 回答
0

您可以使用 a CAAnimationGroup,它是 的子类CAAnimation,并将其组件Animations作为一个组进行操作(我不确定它们是否严格同步,但我认为它们足够接近视觉目的)。

于 2013-10-17T20:05:34.803 回答
0

我现在可以使用 CAMediaTiming 成功暂停和恢复动画,而无需停止动画并更改持续时间并重新启动它。 看到这个有用的资源

类级变量:

UIView MyImage;
double timeSincePause = 0;
double pauseTime = 0;

暂停功能:

MyImage.Layer.Speed = 0.0f;
MyImage.Layer.TimeOffset = MyImage.Layer.ConvertTimeFromLayer(CAAnimation.CurrentMediaTime(), MyImage.Layer) - timeSincePause;

恢复功能:

pauseTime = MyImage.Layer.TimeOffset;
MyImage.Layer.Speed = 1.0f;
MyImage.Layer.TimeOffset = 0.0f;
MyImage.Layer.BeginTime = 0.0f;
timeSincePause = (MyImage.Layer.ConvertTimeFromLayer(CAAnimation.CurrentMediaTime(), MyImage.Layer) - pauseTime);
MyImage.Layer.BeginTime = timeSincePause;
于 2013-10-23T14:16:58.787 回答