【问题标题】:CADisplayLink not firing often enoughCADisplayLink 没有足够频繁地触发
【发布时间】:2012-10-09 20:24:16
【问题描述】:

我正在使用CADisplayLink 来执行声音和动画之间的同步。同步需要非常精确,并且当前在 frameInterval of 1 处运行的 CADisplayLink 调用选择器的频率不够。

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

【问题讨论】:

    标签: ios ios5 core-animation cadisplaylink


    【解决方案1】:

    老问题,但它提出了有趣的观点,所以我会给我的 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 在调用时使用的时间
    • CAAnimationbeginTime 属性(从CAMediaTiming 协议中获取)

    beginTime 设置为CACurrentMediaTime 的偏移量将允许您创建以非常精确和可控的时间开始的动画。如果在向图层添加动画时将其保留为 0(默认值),则会在运行循环结束时自动将其设置为 CACurrentMediaTime,从而导致控制时间较少。

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

    【讨论】:

    • 人们可能对轻微的同步问题非常敏感,尤其是视频和语音(即口型同步)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2023-04-02
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多