【问题标题】:Best way to Pause/Resume dozens of animations?暂停/恢复数十个动画的最佳方式?
【发布时间】:2013-10-17 15:20:09
【问题描述】:

假设我的应用同时运行了几十个动画,我想暂停它们,就好像这是一个游戏并且用户点击了暂停按钮。最好的方法是什么?我正在使用 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

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

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

【问题讨论】:

    标签: c# animation uiviewcontroller xamarin.ios core-animation


    【解决方案1】:

    您可以在绘图方法的开头使用布尔值,如果布尔值为真(意味着没有动画)则直接到结尾

    【讨论】:

    • 我不确定我是否理解您的回复。是不是通过一个CAKeyFrameAnimation连续调用draw方法?我希望能够暂停每一个动画(然后使用恢复按钮进入暂停屏幕),然后将它们准确地恢复到他们离开的地方......
    【解决方案2】:

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

    【讨论】:

    • 那么您的建议是将所有动画作为一组一起运行,这样我只需手动停止和恢复一个而不是几十个?这是个好主意,但这不适用于我正在做的事情,因为我所有的 CALayers 都在以非常独特的方式制作动画:-(
    【解决方案3】:

    我现在可以使用 CAMediaTiming 成功暂停和恢复动画,而无需停止动画并更改持续时间并重新启动它。 See this useful resource

    类级变量:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2012-04-17
      • 2015-07-06
      相关资源
      最近更新 更多