2017-05-02 97 views
0

的詳細信息:奇怪的動畫與UIDynamics後延遲

  • 我使用DispatchQueue.main.asyncAfter(deadline: ...更新UISnapBehavior,這會導致與卡行爲管理單元(動畫)相關聯的視圖到新的snapPoint捕捉點。
  • 我想更新三個圓形視圖的snapPoint,其中每個視圖都堆疊在另一個的頂部。
  • 我想連續更新snapPoint。換句話說,我想讓視圖A在t0開始動畫,在t1開始看B,在t2開始看動畫。

問題:

動畫的定時是奇異的。例如:

  • 如果t0,t1和t2之間的差值爲100毫秒,它們都會完全同時捕捉到它們各自的捕捉點。
  • 但是,如果t0,t1和t2之間的差值爲200毫秒,則視圖A和視圖B同時捕捉到它們各自的位置,但視圖C在完全不同的時間後捕捉到它的新捕捉點比前兩個。
  • 更奇怪的是,如果t0,t1和t2之間的差異達到400毫秒,則單獨查看A animates,並查看B和C一起生成動畫。
  • 最後,如果差值達到500毫秒,則每個視圖在不同的時間進行動畫處理。

這是怎麼回事?

enter image description here

回答

0

使用Timer(SWIFT)或NSTimer(Objective-C的),而不是GCD(大中央調度)是讓我與預期的行爲動畫使這些細緻入微的延遲。

enter image description here

不過,我不知道爲什麼這個工程。我非常歡迎對引擎蓋下正在發生的事情的解釋,或者是否可以與GCD實現相同的效果。

+0

'dispatchAfter'確實如此;在一段時間後派遣*,實際的延遲可能會更長,但不會更短。實際的延遲取決於他的系統決定做什麼。 – Paulw11

+0

它的確如此......理論上。如果您重複上面所做的步驟,其值約爲100毫秒(0.1秒),則所有事情都完全在同一時間發生。如果您使用計時器運行相同的代碼,則動畫按預期發生。我不知道爲什麼,但是儘管人們可能期望會發生這種情況。 – josephap

+0

說「在* 4點來看我*」和「在* 4點之後來看我*」之間的區別。在第一種情況下,我預計在那裏有權利。在第二種情況下,4:15是確定的。 – Paulw11