flip
또는 curl
과 같은 기본 애니메이션 외에도 다른 애니메이션을 사용하여 푸시/팝하는 방법을 묻는 사람들이 많이 있습니다.UINavigationController 전환 효과를 변경하는 적절한 방법은 무엇입니까
문제는 질문/대답이 상대적으로 오래된 것입니다. 즉, [UIView beginAnimations:]
(예 : here)과 같은 것이 있거나 매우 다른 두 가지 접근 방식을 사용한다는 것입니다.
첫번째처럼 (NO
설정된 애니메이션 플래그) 제어기를 추진 전에있는 UIView의 transitionFromView:toView:duration:options:completion:
선택기를 사용하는 다음 :
UIViewController *ctrl = [[UIViewController alloc] init];
[UIView transitionFromView:self.view
toView:ctrl.view
duration:1
options:UIViewAnimationOptionTransitionFlipFromTop
completion:nil];
[self.navigationController pushViewController:ctrl animated:NO];
다른 하나는
명시 적으로 다음과 같은 CATransaction
으로 CoreAnimation
를 사용하는 :
// remember you will have to have the QuartzCore framework added to your project for this approach and also add <QuartzCore/QuartzCore.h> to the class this code is used
CATransition* transition = [CATransition animation];
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
transition.duration = 1.0f;
transition.type = @"flip";
transition.subtype = @"fromTop";
[self.navigationController.view.layer removeAllAnimations];
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
UIViewController *ctrl = [[UIViewController alloc] init];
[self.navigationController pushViewController:ctrl animated:NO];
두 접근법에 대한 장단점이 있습니다.
첫 번째 방법은 훨씬 깨끗한 코드를 제공하지만 "suckEffect", "cube"및 과 같은 애니메이션을 사용하지 못하도록 제한합니다.
두 번째 방법은이를보고 잘못 생각합니다. 앱 스토어에서 앱을 거부 할 수있는 문서화되지 않은 전환 유형 (Common transition types documentation ~ CATransition Class Reference에는 존재하지 않음)을 사용하여 시작합니다.이 트랜잭션을 사용했기 때문에 거부 된 앱에 대한 참조를 찾을 수 없었습니다. 이 문제에 대한 명확한 설명도 감사 하겠지만) "cameraIris", "rippleEffect"등과 같은 다른 애니메이션 유형을 사용할 수 있으므로 애니메이션에 훨씬 더 많은 유연성을 제공합니다.
이와 관련하여 내가 전환 UINavigationController
전환이 필요할 때마다 QuartzCore
및 CoreAnimation
에 대해 진정으로 항소해야합니까? UIKit
만 사용하여 동일한 효과를 얻을 수있는 다른 방법이 있습니까?
그렇지 않은 경우 미리 정의 된 상수 (kCATransitionFade
, kCATransitionMoveIn
등) 대신 "flip"및 "cube"와 같은 문자열 값을 사용하면 앱 스토어에서 내 앱 승인과 관련하여 문제가됩니까?
또한 각각의 방법 중 하나를 선택할지 결정하는 데 도움이 될 수있는 두 가지 방법에 대한 다른 장단점이 있습니까?
나는 전에 cocos2d를 사용해 보았습니다. 1 전에 waaay.0 릴리스 및 UIKit 함께 그들의 애니메이션을 사용할 수 없다는 것을 기억하는 한, CCFSrites 또는 이와 비슷한 CCxxx 클래스를 사용해야했다 ... 그래서 애니메이션 프레임 워크를 사용하면서 ' UIViewControllerler' 내 'UINavigationController'에? 그것은 굉장 할 것이다! 그렇다면이를 달성하는 방법에 대한 몇 가지 코드를 제공 할 수 있습니까? –
이것이 가능하지 않다고 생각합니다. Cocos2D는 OpenGL을 사용하고 자체 뷰를 관리합니다. –