动画5个视图协调一致

时间:2011-03-23 15:07:44

标签: iphone objective-c core-animation

我正在尝试创建自己的加载栏;它由5个条组成,从左到右从底部滑入,然后以相同的顺序滑出到顶部。在所有滑入之间应该有固定的时间(比方说,0.2秒)。

目前,我正在使用计时器逐一启动它们,然后让自己重复。但是,如果在开始或某些事情上有一些滞后,它们会搞砸。前两个或有时三个条几乎同时进行,差距更大,只需命名它就会发生。我现在只是设置每个动画应该开始的固定时间,但是一些滞后使它们变得虚假。

任何给定的杆在大约0.3秒内向上移动,在那里等待0.2秒,然后在0.3秒内进一步向上移动。他们在左邻居之后从左到右开始0.2秒。一旦他们开始,他们只是重复它。

那么,我可以用什么方式来协调它们,它们之间总会有相同的时间?

我考虑过的其他事情只是使用了很多图像(但我需要使用大量的图像),或者使用键值观察(KVO)来查看前一个柱子处于所需高度的时间。

1 个答案:

答案 0 :(得分:1)

根据the NSTimer documentation,NSTimer对象不能保证在iOS上实时准确。

  

计时器不是实时机制;只有当添加了计时器的其中一个运行循环模式正在运行并且能够检查计时器的触发时间是否已经过去时,它才会触发。由于典型的运行循环管理各种输入源,因此定时器的时间间隔的有效分辨率被限制在50-100毫秒的量级。如果在长时间标注期间或在运行循环处于不监视计时器的模式下发生计时器的触发时间,则计时器在下次运行循环检查计时器之前不会触发。因此,计时器可能发射的实际时间可能是计划发射时间之后的一段很长时间。

这是影响NSTimer以及基于OpenGL的游戏的问题。 Michael Daleyhis book中提到了类似于如何为基于OpenGL的游戏正确设置的内容。我怀疑这是同样的情况。

那就是说,我建议预先加载这些图像,然后将它们添加到视图之外的可见视图的边界或框架之外,然后再需要它们,以便在需要时立即可用。

附录:

在考虑了这个之后,我想知道C函数wait()是否会在这里帮助你。这是一个很长的镜头,但也许值得一试。如果没有,那么答案很可能就是没有。

附录2:

我不知道这是否会对你有所帮助,但我找到了this page,它讨论了暂停程序的时间不到一秒。