似乎 iOS 上的最高计时器速率是每秒 60 次使用CADisplayLink
,即每次 0.01666 秒。是否可以同时设置两个计时器,以便更频繁地更新图像的位置?
或者,一个计时器事件处理程序能否在 0.00833 秒后触发另一个计时器事件,以便在 1/60 间隔之间有另一个更新,以达到 120 fps?
似乎 iOS 上的最高计时器速率是每秒 60 次使用CADisplayLink
,即每次 0.01666 秒。是否可以同时设置两个计时器,以便更频繁地更新图像的位置?
或者,一个计时器事件处理程序能否在 0.00833 秒后触发另一个计时器事件,以便在 1/60 间隔之间有另一个更新,以达到 120 fps?
出于多种原因,您不能这样做。首先,由于硬件限制,60fps 有一个硬上限。其次,NSTimer 对于这类事情还不够准确。来自 Timer Programming Topics - Timer 文档(为强调而添加了粗体):
计时精度
定时器不是实时机制;它仅在已添加计时器的运行循环模式之一正在运行并且能够检查计时器的触发时间是否已过时触发。由于典型的运行循环管理的各种输入源,计时器的时间间隔的有效分辨率被限制在 50-100 毫秒的数量级。如果在运行循环处于未监视计时器的模式或长时间调用期间发生计时器的触发时间,则计时器不会触发,直到运行循环下次检查计时器。因此,定时器触发的实际时间可能是计划触发时间之后的一段重要时间。
为什么要在每秒更新 60 次的屏幕上实现 120 fps?
那只会浪费CPU和电源。不要这样做。
然而,拥有一个更频繁触发的计时器绝对是可能的。
然而,在每个回调中绘制是不可能的。(至少使用-drawRect:,不了解OpenGL)。