2013-05-01 2 views
0

은이 질문에서 오는 오전 : How to change the Push and Pop animations in a navigation based appUINavigationController가 애니메이션 변화

내가 푸시와 팝의 애니메이션을 반대하고 싶었다. 즉, 기본 애니메이션 대신 Right로 이동해야하며 왼쪽으로 이동해야합니다.

하위 클래스를 UINavigationController으로 만들고 push 및 pop 메서드를 재정의했습니다.

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    CATransition* transition = [CATransition animation]; 
    transition.duration = 0.4; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush;//kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
    transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 
    [self.view.layer addAnimation:transition forKey:nil]; 

    [super pushViewController:viewController animated:NO]; 
} 

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
    CATransition* transition = [CATransition animation]; 
    transition.duration = 0.4; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush;//kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
    transition.subtype = kCATransitionFromRight; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 
    [self.view.layer addAnimation:transition forKey:nil]; 

    UIViewController *poppedVC = [super popViewControllerAnimated:NO]; 

    return poppedVC; 
} 

지금까지이 완벽하게 작동 : 여기

는 코드입니다.

이 방법에서는 [self.view.layer addAnimation:transition forKey:nil]; 라인이 혼란 스럽습니다. 메서드에 대한 모든 호출에서 새로운 CATransition 개체가 초기화되어 뷰의 레이어에 추가되는 것을 볼 수 있습니다. 나는 이것이 메모리에 어떤 영향을 미치는지 확실하지 않습니다. 안전하고 그렇지 않은 경우, 메모리/성능에 해를 끼치 지 않도록해야합니까?

답변

1

쉬운 솔루션은 CATransition ivar (또는 속성)을 추가하고 매번 다시 사용하는 것입니다. 즉, 성능에 눈에 띄게 영향을 미칠지 의심 스럽지만 문제가 될 때까지 성능에 대해 걱정할 필요가 없습니다.

간단히 말해서 걱정할 필요가 없습니다. 걱정이된다면 각각의 방법에 사용되는 하나의 ivar를 만드십시오.

+0

팁을 제공해 주셔서 감사합니다. "문제가 있다는 것을 확인하기 전까지는 성능에 대해 걱정할 필요가 없습니다." 나는 너의 제안을 시도 할 것이다. –

+1

이것은 풍부한 자원을 갖춘 최신 장치의 세계에서 표준 사례로 널리 받아 들여지고 있습니다. 리소스를 절약하는 것은 결코 쉬운 일이 아닙니다. – HackyStack

관련 문제