由于它们都包含在一个 ViewController 中,因此您可能不会使用 present 和 dismiss 在它们之间进行转换。
我最近遇到了一个类似的场景,我最终使用了来自 ContainerViewController 的自定义转换。
使用 ViewController 包含时需要考虑一些事情。您应该在 developer.apple 上查看此链接,其中包含一些关于 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];
}];