延迟后使用UIDynamics的奇怪动画

时间:2017-05-02 20:56:48

标签: ios animation grand-central-dispatch uikit-dynamics

详细信息:

  • 我正在使用using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { var entry = archive.CreateEntry("MyFileName.txt"); using (var streamWriter = new StreamWriter(entry.Open())) { streamWriter.Write("It was the best of times, it was the worst of times..."); } } //ADD THIS LINE memoryStream.Position = 0; response.Content = new StreamContent(memoryStream); 来更新DispatchQueue.main.asyncAfter(deadline: ...的{​​{1}},这会导致与快照行为相关联的视图与动画捕捉(带动画)到新的捕捉点。
  • 我想更新三个圆形视图的snapPoint,每个圆形视图一个堆叠在另一个上面。
  • 我想连续更新每个UISnapBehavior。换句话说,我希望视图A开始动画到t0的位置,视图B开始在t1动画,并且视图C开始在t2动画。

问题:

动画的时机很奇怪。例如:

  • 如果t0,t1和t2之间的差值为100毫秒,则它们会在完全相同的时间捕捉到各自的捕捉点。
  • 但是,如果t0,t1和t2之间的差值为200毫秒,则视图A和视图B同时捕捉到它们各自的位置,但视图C在完全不同的时间捕捉到其新的捕捉点比前两个。
  • 更奇怪的是,如果t0,t1和t2之间的差异达到400毫秒,则单独查看A动画,并且视图B和C一起动画。
  • 最后,如果差异达到500毫秒,则每个视图在不同的时间动画。

这里发生了什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

使用Timer(Swift)或NSTimer(Objective-C)代替GCD(Grand Central Dispatch)允许我在预期行为的动画中制作这些细微差别。

enter image description here

然而,我不知道为什么会这样。我非常欢迎有关幕后发生的事情的解释,或者是否有可能与GCD达成同样的效果。