2010-02-25 87 views
1

我有UIView的動畫代碼塊看起來像這樣:UIView隱式動畫的延遲來源?

[UIView beginAnimations:@"pushView" context:nil]; 
[UIView setAnimationDelay:0]; 
[UIView setAnimationDuration:.5]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationWillStartSelector:@selector(animationWillStart)]; 

view.frame = CGRectMake(0, 0, 320, 416); 
[UIView commitAnimations]; 

的代碼基本上是模仿ModalView演示動畫,並綁在我的按鈕界面上。當按下按鈕時,在animationWillStart:實際被調用之前,我得到一個很長的(0.5秒)延遲(在iPod Touch上的速度是iPhone 3GS的兩倍)。除此之外,我的應用程序還有很多功能,但是我已經對代碼的各個時間點進行了計時,並且延遲肯定發生在這個模塊上。換句話說,緊接在此代碼塊之前的時間戳和animationWillStart:被調用時的時間戳顯示0.5秒的差異。

我對Core Animation沒有太多經驗,我只是想弄清楚延遲的原因是什麼......當動畫開始時,內存使用穩定,CoreAnimation FPS在樂器中似乎很好。獲得動畫效果的視圖確實有20個以上的子視圖,但是如果這是問題,它會在動畫開始之後導致曇花一現,而不是之前?有任何想法嗎?

回答

1
  1. 嘗試使用一個子視圖或根本沒有子視圖,以確保延遲不是由太多的孩子造成的。
  2. 在儀器中剖析代碼以查看代碼滯後的位置。你可能會想到一些內部的核心動畫函數調用,它會提示你發生了什麼。
  3. 嘗試沒有「正在發生的事情」的代碼,以確保您沒有踩過Core Animation的腳趾與其他代碼。

或簡而言之:實驗和測量,因爲在優化時猜測很少工作。

1

在粘貼塊中,指定選擇器animationWillStart(無冒號),但稍後在您的問題中,請參閱animationWillStart:(帶冒號)。這些選擇器是不相同的,所以有可能您的預期選擇器是從未因此動畫而被調用,並且由於某些其他動畫被稱爲0.5秒以後被調用?