CADisplayLink不经常射击

时间:2012-10-09 20:24:16

标签: ios ios5 core-animation cadisplaylink

我正在使用CADisplayLink来执行声音和动画之间的同步。同步需要非常精确,当前在CADisplayLink为1时frameInterval运行并不会经常调用选择器。

有没有办法增加它的粒度? (frameInterval是一个整数属性,所以我显然不能低于1)

1 个答案:

答案 0 :(得分:0)

老问题,但它提出了有趣的观点,所以我会给出2美分。

正如documentation所述,

A CADisplayLink object is a timer object that allows your application to synchronize its drawing to the refresh rate of the display.

因此,您将无法获得每秒60次以上的更新,即LCD屏幕显示速率。动画本身没有刷新率,它们代表每次屏幕更新时恰好可见的连续移动。

我对声音播放没有太多经验,但我很惊讶CADisplayLink刷新率不够。 1/60秒真的会对用户的耳朵产生影响吗? 也许您用于声音播放的方法会导致某种延迟?

无论如何,如果你想要更准确地将声音与动画同步,我建议设置一个NSTimer,其重复间隔适合你,而不是CADisplayLink

您需要的其他事情是:

  • CACurrentMediaTime()函数,它返回Core Animation在调用时使用的时间
  • CAAnimation的{​​{1}}属性(来自beginTime协议)

CAMediaTiming设置为beginTime的偏移量,可以创建以非常精确和受控的时间开始的动画。如果在向图层添加动画时将其保留为0(默认值),它将自动设置为runloop末尾的CACurrentMediaTime,从而减​​少控制时间。

您还可以从正在运行的CACurrentMediaTime中阅读beginTime以了解其开始的确切时间,这可能不是您在图层中添加它的确切时间(见上文)。