은이 질문에서 오는 오전 : 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
개체가 초기화되어 뷰의 레이어에 추가되는 것을 볼 수 있습니다. 나는 이것이 메모리에 어떤 영향을 미치는지 확실하지 않습니다. 안전하고 그렇지 않은 경우, 메모리/성능에 해를 끼치 지 않도록해야합니까?
팁을 제공해 주셔서 감사합니다. "문제가 있다는 것을 확인하기 전까지는 성능에 대해 걱정할 필요가 없습니다." 나는 너의 제안을 시도 할 것이다. –
이것은 풍부한 자원을 갖춘 최신 장치의 세계에서 표준 사례로 널리 받아 들여지고 있습니다. 리소스를 절약하는 것은 결코 쉬운 일이 아닙니다. – HackyStack