【问题标题】:Best practice to transition between view controllers in a custom container view controller in a storyboard?在故事板的自定义容器视图控制器中的视图控制器之间转换的最佳实践?
【发布时间】:2015-01-17 20:47:39
【问题描述】:

我有一个与 UITabBarController 非常相似的设置,但由于各种原因,我需要创建自己的自定义容器根控制器。

我想在我的两个视图控制器之间创建一个自定义转换,如图所示(VC 1 和 VC 2)。

将我的两个视图控制器作为子级添加到我的主控制器并在根视图控制器中的容器视图上制作视图动画是否正确?这意味着我的两个视图控制器都被同时实例化了。

或者我是否会做一些事情,比如让 VC 1 作为我的根视图控制器上的子视图控制器,然后在转换发生时在我的代码中实例化 VC 2。这当然意味着我将 VC 2 存在于我的情节提要中,但没有连接到根视图控制器并通过情节提要 ID 进行实例化。而且我显然会使用我们在 iOS 7 中收到的自定义转换协议。

或者还有其他选择吗?

【问题讨论】:

    标签: ios uiviewcontroller storyboard uistoryboard custom-transition


    【解决方案1】:

    由于它们都包含在一个 ViewController 中,因此您可能不会使用 present 和 dismiss 在它们之间进行转换。

    我最近遇到了一个类似的场景,我最终使用了来自 ContainerViewController 的自定义转换。

    在使用 ViewController 包含时需要考虑一些事情。您应该在 developer.apple 上查看 this link,其中包含有关 View Controller 包含以及如何在 ChildViewController 之间进行动画处理的一些良好实践和示例。

    说到分配,我会说这取决于你。除非这些 ViewController 占用大量内存,否则我可能会先实例化要显示的第一个,然后对第二个进行延迟初始化(需要时初始化),然后将它们都保留在内存中。完成转换后,确保从容器中删除“未使用”的 ViewController 的视图,它应该一切都好。

    这是一个从 firstVC 的视图淡入到 secondVC 的视图的简单示例:

    [self addChildViewController:self.secondViewController];
    [self.view insertSubview:self.secondViewController.view belowSubview:self.firstViewController.view];
    
    [UIView animateWithDuration:0.4 animations:^{
        self.firstViewController.view.alpha = 0;
    } completion:^(BOOL finished) {
        [self.firstViewController willMoveToParentViewController:nil];
        [self.firstViewController.view removeFromSuperview];
        [self.firstViewController removeFromParentViewController];
        [self.secondViewController didMoveToParentViewController:self];
    }];
    

    【讨论】:

    • 当您说您最终使用了来自 Container VC 的自定义转换时。你的意思是你只是使用 UIView 动画在两个 VC 之间进行视觉转换,尽管它们实际上已经同时分配了?
    • 是的,但是直到该动画发生之前才会分配第二个 ViewController。我发给你的链接中有一个例子,尽管我最终没有使用 transitionFromViewController:toViewController: 方法。相反,我只是在我的 UIView 动画实现中手动添加和删除视图
    • 好的,谢谢,我明白了。问题是,当您通过 IB 添加孩子时,您会同时实例化两个 VC。我只是想知道这样做有什么问题吗?我理解记忆的含义,但除此之外,还有什么?
    • 哦,抱歉,我没听清。我很确定没有别的了。由于 UITabBarController 确实立即实例化它的孩子,我认为你很好:)
    猜你喜欢
    • 2013-02-01
    • 2012-04-19
    • 2013-05-11
    • 2023-03-05
    • 1970-01-01
    • 2021-08-05
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多