2017-05-02 197 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