iOS 7 SDK之前的VC切换解决方案

在iOS5和iOS6中,除了标准的Push,Tab和PresentModal之外,一般是使用ChildViewController的方式来完成VC之间切换的过渡效果。ChildViewController和自定义的Controller容器是iOS 5 SDK中加入的,可以用来生成自定义的VC容器,简单来说典型的一种用法类似这样:

[self addChildViewController:toVC];
[fromVC willMoveToParentViewController:nil];
[self.view addSubview:toVC.view];

__weak id weakSelf = self;
[self transitionFromViewController:fromVC
                  toViewController:toVC duration:0.3
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{}
                        completion:^(BOOL finished) {
    [fromVC.view removeFromSuperView];
    [fromVC removeFromParentViewController];
    [toVC didMoveToParentViewController:weakSelf];
}];
addChildViewController方法:

向视图控制器容器中添加子视图控制器

- (void)addChildViewController:(UIViewController *)childController
removeFromParentViewController方法:

从父视图控制器中删除

- (void) removeFromParentViewController
willMoveToParentViewController方法:

当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用
parent:父视图控制器,如果没有父视图控制器,将为nil

- (void)willMoveToParentViewController:(UIViewController *)parent

注意
1.当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:
[将要删除的视图控制器 willMoveToParentViewController:nil];
2.当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。

didMoveToParentViewController方法:

当从一个视图控制容器中添加或者移除viewController后,该方法被调用。
parent:父视图控制器,如果没有父视图控制器,将为nil
当我们向我们的视图控制器容器(就是父视图控制器,它调用addChildViewController方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。
removeFromParentViewController 方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。

- (void) didMoveToParentViewController:(UIViewController *)parent

你可能感兴趣的:(iOS 7 SDK之前的VC切换解决方案)