2013-06-20 2 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의 다른 전환이 느려지 게된다는 것입니다. 당신은 내가 어떻게 이러한 애니메이션을 유지할 수 있지만 천천히 전환하지 않는지 알 수 있습니까?

그뿐만 아니라, 나는

+0

둘 다 동일한 재생 시간과 동일한 애니메이션 커브를 가지고 있다면 왜 개별 애니메이션 '블록'에서 재생합니까? – Putz1103

+0

각 블록은 약간 다른 장소로 이동하기 때문에. 각 블록이 없으면 제대로 작동하지 않습니다. 그것을 작동시키는 방법을 알고 있습니까? – alexggordon

+0

모든 것을위한 초기 위치를 설정하십시오. 그런 다음 UIView animate : with ...를 사용하여 애니메이션 작업을 수행하십시오. 코드의 다른 지점에 대해 이야기하고 있다면 여러 애니메이션 블록을 사용하십시오 (그러나 백그라운드에서 동시에 작동하여 "느려짐"을 유발할 수 있습니다). 내 경험에 따르면, 하나의 애니메이션 콜에서 모든 동시 애니메이션을 수행하는 것은 그 일을하는 방법을 찾을 수 있다면 가장 매끄러운 방식으로 작동합니다. – Putz1103

답변

0

당신의 말에 commitAnimations를 추가하는 것을 잊었다 ...이 아이폰 OS 7과 엑스 코드 5 개발자 미리보기에 개발되고, 그래서 버그를 배제하고 있지 않다 말해야한다 애니메이션 블록 ... 아래에서 문제가 해결 될 것입니다.

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];** 
관련 문제