交叉溶解RootViewController的动画改变了吗?

时间:2012-09-23 21:44:20

标签: objective-c animation view controller root

如何更改UIWindow中的RootViewController并将其交叉解析为新根?

2 个答案:

答案 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();
   }
 }