我有一个与UITabBarController非常相似的设置,但出于各种原因,我需要创建自己的自定义容器根控制器。
我想在图片(VC 1& VC 2)中指定的两个视图控制器之间创建自定义转换。
将我的两个视图控制器作为子控件添加到主控制器并对位于根视图控制器中的容器视图执行视图动画是否正确?这意味着我的两个视图控制器都会立即实例化。
或者我在我的根视图控制器上执行类似VC 1直播作为子视图控制器的操作,然后在转换发生时在我的代码中实例化VC 2。这当然意味着我会在我的故事板中使用VC 2但不连接到根视图控制器并通过Storyboard ID进行实例化。我显然会使用我们在iOS 7中收到的自定义转换协议。
还是有其他选择吗?
答案 0 :(得分:1)
由于它们都包含在一个ViewController中,因此您可能不会使用present和dismiss在它们之间进行转换。
我最近有一个类似的场景,我最终使用自己的ContainerViewController自定义转换。
使用ViewController包含时需要考虑一些事项。您应该在developer.apple上查看this link,其中包含有关View Controller包含的一些好的做法和示例,以及如何在ChildViewControllers之间设置动画。
说到分配,我说它取决于你。除非这些ViewControllers占用大量内存,否则我可能会首先实例化要显示的第一个内存,并在第二个上执行延迟初始化(在需要时初始化),然后将它们保留在内存中。完成转换后,请务必删除"未使用的" ViewController从容器中查看它应该都很好。
这是一个简单的例子,从第一个VC的视图淡出到第二个VC的视图:
[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];
}];