[英]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在被調用時使用的時間 CAAnimation
的beginTime
屬性(它從CAMediaTiming
協議獲取) 將beginTime
設置為與CACurrentMediaTime
的偏移量將使您可以創建在非常精確且可控制的時間開始的動畫。 如果在將動畫添加到圖層時將其保留為0(默認值),則會在運行CACurrentMediaTime
結束時將其自動設置為CACurrentMediaTime,從而減少了對時序的控制。
您還可以從正在運行的CAAnimation
讀取beginTime
,以了解其開始的確切時間,這可能不是將其添加到圖層中的確切時間(請參見上文)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.