如何更改UIWindow中的RootViewController并将其交叉解析为新根?
答案 0 :(得分:3)
我建议在transitionFromView
上使用UIView
方法。您可以使用以下代码来处理转换:
- (void)transitionToViewController:(UIViewController *)viewController
withTransition:(UIViewAnimationOptions)transition
{
[UIView transitionFromView:self.window.rootViewController.view
toView:viewController.view
duration:0.65f
options: UIViewAnimationOptionTransitionCrossDissolve
completion:^(BOOL finished){
self.window.rootViewController = viewController;
}];
}
您可以找到此方法的参考文档here。
答案 1 :(得分:0)
让我们看看我的例子,了解如何切换rootviewcontroller。
- (void)showTutorialsScreen:(BOOL)animated
{
NUDTutorialsViewController *tutorialsVC = [[NUDTutorialsViewController alloc] initWithNibName:NSStringFromClass([NUDTutorialsViewController class]) bundle:nil];
UINavigationController *tutorialsNavController = [[UINavigationController alloc] initWithRootViewController:tutorialsVC];
[self switchRootViewController:tutorialsNavController animated:animated completion:nil];
}
- (void)showLoadingScreen:(BOOL)animated
{
NUDLoadingViewController *loadingVC = [[NUDLoadingViewController alloc] initWithNibName:NSStringFromClass([NUDLoadingViewController class]) bundle:nil];
[self switchRootViewController:loadingVC animated:animated completion:nil];
}
- (void)showMainScreen:(BOOL)animated
{
NUDMainViewController *mainVC = [[NUDMainViewController alloc] initWithNibName:NSStringFromClass([NUDMainViewController class]) bundle:nil];
UINavigationController *mainNavController = [[UINavigationController alloc] initWithRootViewController:mainVC];
[self switchRootViewController:mainNavController animated:animated completion:nil];
}
- (void)switchRootViewController:(UIViewController *)aRootViewController animated:(BOOL)animated completion:(void(^)())completion
{
if (animated) {
[UIView transitionWithView:self.window duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
self.window.rootViewController = aRootViewController;
[UIView setAnimationsEnabled:oldState];
} completion:^(BOOL finished) {
if (completion) completion();
}];
}
else {
self.window.rootViewController = aRootViewController;
if (completion) completion();
}
}