簡體   English   中英

CADisplayLink觸發頻率不夠高

[英]CADisplayLink not firing often enough

我正在使用CADisplayLink在聲音和動畫之間執行同步。 同步需要非常精確,並且當前在frameInterval為1的情況下運行CADisplayLink調用頻率不夠高。

有沒有辦法增加其粒度? frameInterval是一個整數屬性,因此我顯然不能低於1)

這是個老問題,但提出了一些有趣的觀點,所以我給我2美分。

文檔所述

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

因此,您將無法獲得比LCD屏幕顯示速率每秒更新60次更快的更新。 動畫本身沒有刷新率,它們代表着連續的運動,每次屏幕更新時它就恰好可見。

我在聲音播放方面經驗不足,但是我對CADisplayLink刷新率不足感到驚訝。 1/60秒真的會對使用者的耳朵產生影響嗎? 也許您用於聲音播放的方法會引起某種延遲?

無論如何,如果您想與動畫更好地同步聲音,我建議設置一個適合您的重復間隔的NSTimer而不是CADisplayLink

您還需要的其他東西是:

  • CACurrentMediaTime()函數,該函數返回Core Animation在被調用時使用的時間
  • CAAnimationbeginTime屬性(它從CAMediaTiming協議獲取)

beginTime設置為與CACurrentMediaTime的偏移量將使您可以創建在非常精確且可控制的時間開始的動畫。 如果在將動畫添加到圖層時將其保留為0(默認值),則會在運行CACurrentMediaTime結束時將其自動設置為CACurrentMediaTime,從而減少了對時序的控制。

您還可以從正在運行的CAAnimation讀取beginTime ,以了解其開始的確切時間,這可能不是將其添加到圖層中的確切時間(請參見上文)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM