NavigationControllers具有ViewController堆栈来管理和限制动画过渡.
将视图控制器作为子视图添加到现有视图控制器需要将事件传递给子视图控制器,这很难管理,几乎没有烦恼,并且通常在实现时感觉像是一个糟糕的黑客(Apple也建议不要这样做).
呈现模式视图控制器再次将视图控制器放在另一个上面,虽然它没有上面描述的事件传递问题,但它并没有真正"交换"视图控制器,而是堆叠它.
故事板仅限于iOS 5,几乎是理想的,但不能在所有项目中使用.
有人可以在没有上述限制的情况下更改视图控制器的方式提供一个SOLID代码示例,并允许它们之间的动画过渡?
一个接近的例子,但没有动画: 如何在没有导航控制器的情况下使用多个iOS自定义视图控制器
编辑:导航控制器使用很好,但需要动画过渡样式(不仅仅是幻灯片效果),显示的视图控制器需要完全交换(不是堆叠).如果第二个视图控制器必须从堆栈中删除另一个视图控制器,那么它的封装不够.
编辑2:iOS 4应该是这个问题的基本操作系统,我应该在提到故事板时澄清(上图).
有没有什么方法可以在将现有的viewcontroller替换为rootviewcontroller并使用appDelegate中的新视频时获得过渡/动画效果?
我正在尝试用动画替换窗口rootViewController,它只能部分工作.
我以编程方式创建一个UINavigationController -
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"InboxStoryboard" bundle:nil];
UIViewController *innerViewController = [storyBoard instantiateViewControllerWithIdentifier:@"centerView"];
UINavigationController *centerView = [[UINavigationController alloc] initWithRootViewController:innerViewController];
Run Code Online (Sandbox Code Playgroud)
然后我替换包含在动画块中的窗口根视图控制器 -
[UIView transitionWithView:self.viewController.view.window
duration:0.5
options: UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
self.viewController.view.window.rootViewController = centerView;
}
completion:nil];
Run Code Online (Sandbox Code Playgroud)
发生的事情是动画发生但我创建的控制器只是部分可见,请看下面的图片 -

因此,您可以在旋转期间看到视图仅部分呈现.
以前有人碰到过这种行为吗?