2008-11-04 79 views
3

我正在使用最初從Apple示例ViewTransitions中取得的一些代碼,以便將兩個視圖互相交換。CATransition在動畫開始之前顯示從轉換結束開始的單幀

CATransition *animation = [CATransition animation]; 
[animation setDelegate:self]; 
[animation setType:kCATransitionFade]; 
[animation setDuration:0.3f]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; 
[[container layer] addAnimation:animation forKey:@"swap"]; 

當我的過渡上devlice執行,我有時會過渡動畫的最後一幀的單個幀閃光,然後播放動畫順利。這給第二個視圖帶來了非常震撼的效果,第二個視圖在平滑動畫執行之前閃爍然後再次出現。

我的例子和蘋果例子之間的主要區別是我的意見不是全屏,我有一個容器UIView,其中包含兩個子視圖,我將我的動畫應用到容器層而不是根視圖層。我看不出這應該會有很大的不同。

在模擬器中根本不會發生此問題,並且在設備上是間歇性的(大約60-70%的時間)。有沒有人看到這種行爲,如果是這樣,你是如何解決它的?

用更多的信息更新: 該代碼最初是多部分動畫的一部分,但我將其移動到由按鈕觸發以隔離問題。這個問題出現在兩種情況下。

該動畫代表已實施,但已被刪除以嘗試隔離該問題。

在動畫過程中視圖不會改變,實際上[container setUserInteractionEnabled:NO]正在被調用(但是如果用戶交互被禁用,問題也會發生)。

我嘗試從轉換中間開始動畫,並在使用setStartProgresssetEndProgress結束之前結束,問題仍然存在。

我試過減慢動畫持續時間,以及沒有效果。

回答

0

解決了,我錯過了這個我認爲無關緊要的關鍵部分;)在上面的代碼示例中設置了動畫之後,我用相同的方法交換了視圖。

將其移至animationDidStart委託可解決問題。

+0

你能舉出一些這個實例代碼嗎?我已經通過描述實現了我的理解,但我的'毛刺框架'仍然存在。 – teabot 2009-09-06 19:26:08

0

要開始回答您的問題需要更多信息 - 例如,您如何調用該代碼(例如,它是作爲操作綁定到按鈕還是以某種方式自動觸發),您是否實現了委託方法開始和停止動畫(以及它們中包含的內容),並且在動畫過程中的某個時刻你的觀點是否發生了變化?模擬器和設備之間的時間關閉 - 你不應該依靠模擬器來測試動畫,因爲一切都會更快。