【发布时间】:2012-09-23 21:44:20
【问题描述】:
如何更改 UIWindow 中的 RootViewController 并将其交叉溶解到新的根目录?
【问题讨论】:
标签: objective-c animation view controller root
如何更改 UIWindow 中的 RootViewController 并将其交叉溶解到新的根目录?
【问题讨论】:
标签: objective-c animation view controller root
我建议在UIView 上使用transitionFromView 方法。例如,您可以使用以下代码来处理您的转换:
- (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。
【讨论】:
让我们看看我的例子来了解如何切换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();
}
}
【讨论】: