2013-06-20 61 views
0

所以我有一個應用程序,我應用程序打開後立即爲一些UI元素設置動畫。這些動畫使用簡單的UIView動畫完成。下面是viewDidLoad中部分使用UIView動畫後的應用程序緩慢

//animate settings in the frame 
    CGRect settingsFrame = settingsView.frame; 
    settingsFrame.origin.x = -104; 
    settingsFrame.origin.y = 457; 
    settingsView.frame = settingsFrame; 

    //animate about in the frame 
    CGRect aboutFrame = aboutView.frame; 
    aboutFrame.origin.x = -104; 
    aboutFrame.origin.y = 457; 
    aboutView.frame = aboutFrame; 

的樣品,並在這裏是被稱爲相應的方法部分。

CGRect settingsFrame = settingsView.frame; 
settingsFrame.origin.x = 0; // new x coordinate 
settingsFrame.origin.y = 457; // new y coordinate 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration: 1]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
settingsView.frame = settingsFrame; 

CGRect aboutFrame = aboutView.frame; 
aboutFrame.origin.x = 104; // new x coordinate 
aboutFrame.origin.y = 457; // new y coordinate 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration: 1]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
aboutView.frame = aboutFrame; 

還有4組匹配的代碼組完成動畫。我的問題是,無論何時啓用viewDidLoad部分(未註釋掉),它都會減慢我應用程序中其他轉換到xib的速度。你們有沒有想法如何保持這些動畫,但沒有緩慢的過渡?

除此之外,我應該說這是被在iOS 7和5的Xcode開發者預覽版開發的,所以我不排除一個錯誤......

+0

如果他們都有相同的持續時間和相同的動畫曲線你爲什麼要在不同的動畫'塊'中做它們? – Putz1103

+0

因爲每個區塊都會略有不同。如果沒有每個模塊,我都無法正常工作。你知道一種方法來使它起作用嗎? – alexggordon

+0

爲所有內容設置初始位置。然後使用'UIView animate:with ...'來做動畫。如果您正在討論代碼中的不同點,則使用多個動畫塊(但它們可能會在後臺同時工作,從而導致「緩慢」)。根據我的經驗,如果您可以找到一種方法,那麼在單個動畫調用中執行所有並發動畫效果最爲平滑。 – Putz1103

回答

0

你忘了在末尾添加commitAnimations動畫塊... 做下面,你的問題將被修復。

CGRect settingsFrame = settingsView.frame; 
settingsFrame.origin.x = 0; // new x coordinate 
settingsFrame.origin.y = 457; // new y coordinate 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration: 1]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
settingsView.frame = settingsFrame; 
**[UIView commitAnimations];** 

CGRect aboutFrame = aboutView.frame; 
aboutFrame.origin.x = 104; // new x coordinate 
aboutFrame.origin.y = 457; // new y coordinate 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration: 1]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
aboutView.frame = aboutFrame; 
**[UIView commitAnimations];**