我使用CADisplayLink
來執行聲音和動畫之間的同步。同步需要非常精確並且當前正在運行CADisplayLink
在frameInterval
之1沒有足夠頻繁地調用選擇器。CADisplayLink不夠頻繁地發射
有沒有辦法增加粒度? (frameInterval
是一個整數屬性,所以我顯然不能低於1)
我使用CADisplayLink
來執行聲音和動畫之間的同步。同步需要非常精確並且當前正在運行CADisplayLink
在frameInterval
之1沒有足夠頻繁地調用選擇器。CADisplayLink不夠頻繁地發射
有沒有辦法增加粒度? (frameInterval
是一個整數屬性,所以我顯然不能低於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次,液晶屏的顯示速率更加頻繁。動畫本身沒有刷新率,它們表示每次屏幕更新時恰好可見的連續移動。
我對聲音播放沒有太多經驗,但我很驚訝刷新率是不夠的。 1/60秒真的會對用戶的耳朵產生影響嗎? 也許你用於聲音播放的方法會導致某種滯後?
無論如何,如果你想更好地與你的動畫同步聲音,我會建議設置一個NSTimer
重複間隔適合你,而不是CADisplayLink
。
其他的事情你會需要有:
CACurrentMediaTime()
函數返回由核心動畫使用的時間在它被稱爲CAAnimation
的beginTime
財產的時間(它得到從CAMediaTiming
協議)設置beginTime
作爲從CACurrentMediaTime
偏移將允許您創建開始在動畫非常精確和可控的時間。如果將動畫添加到圖層時將其保留爲0(默認值),則會在循環結束時自動將其設置爲CACurrentMediaTime
,從而導致控制時間更少。
您還可以從正在運行的CAAnimation
中讀取beginTime
,以瞭解它開始的確切時間,可能不是您將其添加到圖層的確切時間(請參閱上文)。
人們可能會對輕微的同步問題感到驚訝地敏感 - 特別是對於視頻和語音(即脣形同步)。 – ipmcc