假设我的应用程序同时运行了几十个动画,我想将它们全部暂停,就好像这是一个游戏而用户点击暂停按钮。最好的方法是什么?我正在使用CAKeyFrameAnimations,UIView.Animate(),CABasicAniamtions等的组合。显然,当用户暂停时,我可以手动停止它们,并在用户取消暂停时从它们停止的位置恢复它们。但是有没有这样做的更好方法是什么?
修改:我希望能够暂停&通过用户按下按钮恢复。
第二次编辑:我有90%的方式,但我仍然遇到问题......
这是我的Xamarin iOS项目: https://www.dropbox.com/s/5zbhhao6cijtb1i/Test_Pause.zip
有用的Apple参考: https://developer.apple.com/library/ios/qa/qa1673/_index.html
我有一个启动位置动画的应用程序。当我第一次暂停它时,它会正确暂停。当我点击简历时,它会从暂停的正确位置恢复正常。但是当你第二次再次点击暂停时(在相同的动画中),它会恢复到一个位置,好像它从未暂停开始一样。它在应有的位置之前暂停。当然,理想的结果是让它在你点击暂停按钮时完全停止。
很抱歉,如果这听起来令人困惑,我附加的示例项目非常简单,重现问题,从上面的链接下载我的应用程序。运行。确保在同一动画中再次暂停,恢复,然后再次暂停。知道我做错了吗?
答案 0 :(得分:0)
你可以在绘图方法的开头使用布尔值,如果布尔值为真(意味着没有动画),那么它会直接到达结尾
答案 1 :(得分:0)
您可以使用CAAnimationGroup
,它是CAAnimation
的子类,并将其组件Animations
作为一个组进行操作(我不确定它们是否严格 已同步,但我认为它们足够接近视觉目的。)
答案 2 :(得分:0)
我现在可以使用CAMediaTiming成功暂停和恢复动画,所有这些都无需停止aniamtion并更改持续时间并再次启动它。 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;