编辑:可以在任何方向上工作的新答案。
原始答案仅在界面为纵向时有效。这是b / c视图转换动画,它替换了一个视图w /一个不同的视图,并且必须在添加到窗口(例如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];
}
编辑:下面的原始答案-仅适用于纵向
对于此示例,我做出了以下假设:
您已将一个视图控制器分配为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];
}