2012-06-20 2 views
0

보기 컨트롤러 사이에서 사용자 지정 애니메이션을 수행하려고합니다. 아래의 경우 UINavigationController의 popViewController를 모방하고 있습니다. 그러나 아이폰과 특히 iPad에 많이 뒤떨어져있는 것으로 보입니다. 그리고 Time Profiler는 모든 지연이 addSubview 라인에서 오는 것이라고 말합니다.addSubview 지연?

어쨌든, 난 인터페이스 빌더를 통해 nlView를 연결하고 나는 아래의 코드를 사용합니다

그래서
[self.view.superview addSubview:nlView.view]; 
    [nlView.view setFrame:CGRectMake(-kWidth, 20, kWidth, kHeight-20)]; 
    [UIView animateWithDuration:2 
        animations:^{ 
         [nlView.view setFrame:CGRectMake(0, 20, kWidth, kHeight-20)]; 
         [self.view setFrame:CGRectMake(kWidth, 20, kWidth, kHeight-20)]; 
        } 
        completion:^(BOOL finished){ 
         [self.view removeFromSuperview]; 
        }]; 

, 어떻게 전혀 아무것도이 지연을 최소화 할 수 있습니까? 누출이나 그와 같은 것이 없지만 어떻게하면 뷰를 변경할 때 지연이 없도록 내 논리를 변경할 수 있습니까?

감사합니다.

+0

전화'에 QuartzCore를 추가해야 subview로 추가하기 전에'setView :'nlView.view'를 사용하십시오. 이 경우에 nlView의'drawRec :'메서드가 한 번만 호출되기 때문에 도움이 될 수 있습니다. –

+0

그래도 iPad에서는 특별히 그렇진 않습니다. 애플 리케이션의 아이폰 버전 괜찮아 보인다. 지연을 완화하기 위해 내가 뭘 할 수 있을까요? –

+0

이것을 개선하기 위해 할 수있는 또 하나의 작업은'animateWithDuration :'에서'float dH = kHeight - 20'을 사용하기 전에'kHeight-20'을 계산 한 다음'[UIView animateWithDuration : 2 animations :^{[nlView.view setFrame : CGRectMake (0, 20, kWidth, dH)]; ... ' –

답변

1

이 같은 뷰의 레이어 위치를 애니메이션 프레임을 설정하는 대신 다음 뷰의 위치를 ​​애니메이션을 적용 할 경우 : 물론 [nlView.view.layer setPosition: newPosition]...이 프로젝트 및 수입 QuartzCore/QuartzCore.h