2012-10-09 43 views
0

我使用CADisplayLink來執行聲音和動畫之間的同步。同步需要非常精確並且當前正在運行CADisplayLinkframeInterval之1沒有足夠頻繁地調用選擇器。CADisplayLink不夠頻繁地發射

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

回答

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次,液晶屏的顯示速率更加頻繁。動畫本身沒有刷新率,它們表示每次屏幕更新時恰好可見的連續移動。

我對聲音播放沒有太多經驗,但我很驚訝刷新率是不夠的。 1/60秒真的會對用戶的耳朵產生影響嗎? 也許你用於聲音播放的方法會導致某種滯後?

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

其他的事情你會需要有:

  • CACurrentMediaTime()函數返回由核心動畫使用的時間在它被稱爲
  • CAAnimationbeginTime財產的時間(它得到從CAMediaTiming協議)

設置beginTime作爲從CACurrentMediaTime偏移將允許您創建開始在動畫非常精確和可控的時間。如果將動畫添加到圖層時將其保留爲0(默認值),則會在循環結束時自動將其設置爲CACurrentMediaTime,從而導致控制時間更少。

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

+0

人們可能會對輕微的同步問題感到驚訝地敏感 - 特別是對於視頻和語音(即脣形同步)。 – ipmcc