편집 : 모든 방향에서 작동하는 새로운 답변.
원래 답변은 인터페이스가 세로 방향 일 때만 작동합니다. 이것은 다른 뷰가있는 뷰를 대체하는 b / c 뷰 전환 애니메이션으로, 창에 추가 된 첫 번째 뷰 아래의 레벨 (예 :) 이상이어야합니다window.rootViewController.view.anotherView
.
내가 호출 한 간단한 컨테이너 클래스를 구현했습니다 TransitionController
. https://gist.github.com/1394947 에서 찾을 수 있습니다 .
따로, 별도의 클래스 b / c로 구현하는 것이 더 쉽습니다. 재사용하기 쉽습니다. 원하지 않으면 TransitionController
클래스에 대한 필요성을 제거하면서 앱 델리게이트에서 동일한 로직을 직접 구현할 수 있습니다 . 그러나 필요한 논리는 동일합니다.
다음과 같이 사용하십시오.
앱 위임에서
// add a property for the TransitionController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MyViewController *vc = [[MyViewContoller alloc] init...];
self.transitionController = [[TransitionController alloc] initWithViewController:vc];
self.window.rootViewController = self.transitionController;
[self.window makeKeyAndVisible];
return YES;
}
모든 뷰 컨트롤러에서 새 뷰 컨트롤러로 전환하려면
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
편집 : 아래의 원래 답변-portait 방향에서만 작동합니다
이 예제에서는 다음과 같은 가정을했습니다.
rootViewController
창에 뷰 컨트롤러가 할당되어 있습니다.
새보기로 전환하면 현재 viewController를 새보기를 소유 한 viewController로 바꾸려고합니다. 언제든지 현재 viewController 만 활성화됩니다 (예 : 할당 됨).
코드는 다르게 작동하도록 쉽게 수정할 수 있습니다. 요점은 애니메이션 전환 및 단일 뷰 컨트롤러입니다. 뷰 컨트롤러를에 할당하는 것 외에는 아무 곳에 나 보관하지 마십시오 window.rootViewController
.
앱 델리게이트에서 전환을 애니메이션으로 만드는 코드
- (void)transitionToViewController:(UIViewController *)viewController
withTransition:(UIViewAnimationOptions)transition
{
[UIView transitionFromView:self.window.rootViewController.view
toView:viewController.view
duration:0.65f
options:transition
completion:^(BOOL finished){
self.window.rootViewController = viewController;
}];
}
뷰 컨트롤러에서의 사용 예
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}