簡體   English   中英

暫停/恢復數十個動畫的最佳方法?

[英]Best way to Pause/Resume dozens of animations?

假設我的應用程序正在同時運行數十個動畫,而我想將它們全部暫停,就好像這是一個游戲並且用戶按下了暫停按鈕一樣。 最好的方法是什么? 我使用的是CAKeyFrameAnimations,UIView.Animate(),CABasicAniamtions等的組合。顯然,當用戶單擊暫停時,我可以手動將其全部停止,並在用戶取消暫停時從停止的位置恢復它們。更好的方法嗎?


編輯 :我希望能夠通過用戶按下按鈕來暫停和恢復。


2nd編輯 :我有90%的方式到達那里,但是我仍然有問題...

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

有用的Apple參考: https : //developer.apple.com/library/ios/qa/qa1673/_index.html

我有一個啟動位置動畫的應用程序。 當我第一次暫停時,它會正確暫停。 當我點擊恢復時,它會從暫停的位置正確恢復。 但是,當您第二次(在相同的動畫中)再次按下暫停時,它會恢復到從未停止過的位置。 它會停在應有的位置。 當然,理想的結果是使它在您按下“暫停”按鈕時准確地停在原處。

對不起,如果聽起來令人困惑,我附加的示例項目確實非常簡單, 要重現此問題,請從上面的鏈接下載我的應用程序。 運行。 確保在同一動畫中全部暫停,恢復,然后再次暫停。 知道我在做什么錯嗎?

您可以在繪圖方法的開頭使用Boolean,如果boolean為true(表示沒有animation),那么它將直接到達結尾

您可以使用CAAnimationGroup一個子類CAAnimation ,並將其組件Animations作為一個組進行操作(我不確定它們是否嚴格同步,但我認為它們足夠接近以用於視覺目的)。

現在,我可以使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM