2011-05-20 67 views
2

任何人都可以告訴我,CAKeyframeAnimation中的關鍵幀是否始終保證在動畫運行時用它們的確切值命中?或者...他們只是作爲插值指南嗎?例如如果我指定某個任意屬性遵循的路徑上的3個點 - 我們稱之爲'位置' - 並指定0.3f秒的執行時間,同時(顯然)要點1和3必須命中(因爲它們是終點)我可以保證點2將按照關鍵幀數組中的規定進行精確評估嗎?令人驚訝的是,我還沒有找到一個能給出適當答案的文件。我問這是因爲我正在編寫一個OpenAL音效同步器,它使用關鍵幀動畫的路徑沿着它的長度觸發各種短小的聲音,而其中大部分都會被執行,現在又有一些不會,我也不知道如果這是我的邏輯錯誤或我的代碼。 在此先感謝。CAKeyframeAnimation中的關鍵幀是否總是完全命中?

+0

非常有趣!我們有類似的問題。你有這個運氣嗎?關於如何將音頻與關鍵幀同步的任何提示,您想分享? – 2011-05-27 10:02:05

回答

3

通常,依靠計算結果的浮點值的「正確性」充滿危險。例如下面的代碼:

CGFloat x1 = some_function(); 
CGFloat x2 = some_other_function(); 
if(x1 == x2) 
{ 
    // do something 
} 

甚至不知道函數做什麼很可能是不正確的。即使函數做了非常類似的計算,優化器也可能會進行重新排序的操作,導致小的舍入錯誤,足以導致相等性測試失敗。

它應該是:被執行

CGFloat x1 = some_function(); 
CGFloat x2 = some_other_function(); 
CGFloat tolerance = 0.1; // or some tolerance suitable for the calculation. 
if(fabsf(x1 - x2) < tolerance) 
{ 
    // do something 
} 

其中公差是適於計算某個值。因此,在不知道CAKeyframeAnimation的內部結構的情況下,我可以告訴你任何期望確切值的代碼本質上都是「脆弱的」。這並不是說你可能會得不到確切的值,但它將取決於輸入數據。

我希望這會有所幫助。

+0

謝謝你idz!事實上,我使用寬容 - 但也許我的容忍度仍然過於嚴格。然而,你已經給我食物在同一件套件中考慮其他事情。關於我的'Audimator'的奇怪之處在於,按順序運行同樣的動畫,沒有其他代碼會產生結果,即有時會播放所有聲音,而在其他聲音中卻有一部分(甚至不是同一個)會被忽略 - 但它絕不是終端聲音。我很快就會得到一個新的iPhone 4,所以我會看看這個現象是否在設備上出現。非常感謝您的幫助。 – VectorVictor 2011-05-21 20:02:42

+0

我仍然在學習這個論壇的工作原理,並感謝您的建議。我會回去承認我以前的答案。再次感謝您的提醒!丟棄關鍵點活動似乎是CPU負載的一個功能。如果我運行與我的測試一起運行的應用程序混亂的測試,關鍵點會錯過左側,右側和中心,並且沒有特定的順序。智能幀丟失可能是罪魁禍首。 – VectorVictor 2011-05-31 10:51:27

+0

@VectorVictor,不用擔心,我在這裏相當新,所以仍然不確定所有的繩索。我懷疑你對丟幀可能是正確的。 – idz 2011-05-31 19:20:39

相關問題