在不使用导航控制器堆栈,子视图或模态控制器的情况下更改视图控制器的动画?

NavigationControllers具有ViewController堆栈来管理和限制动画过渡。


将视图控制器作为子视图添加到现有视图控制器需要将事件传递给子视图控制器,这很难管理,几乎没有烦恼,并且通常在实现时感觉像是一个糟糕的黑客(Apple也建议不要这样做)。


呈现模式视图控制器再次将视图控制器放在另一个上面,虽然它没有上面描述的事件传递问题,但它并没有真正“交换”视图控制器,而是堆叠它。


故事板仅限于iOS 5,几乎是理想的,但不能在所有项目中使用。


有人可以在没有上述限制的情况下更改视图控制器的方式提供一个SOLID代码示例,并允许它们之间的动画过渡?


一个接近的例子,但没有动画: 如何在没有导航控制器的情况下使用多个iOS自定义视图控制器


编辑:导航控制器使用很好,但需要动画过渡样式(不仅仅是幻灯片效果)显示的视图控制器需要完全交换(不是堆叠)。如果第二个视图控制器必须从堆栈中删除另一个视图控制器,那么它的封装不够。


编辑2:iOS 4应该是这个问题的基本操作系统,我应该在提到故事板时澄清(上图)。


慕斯王
浏览 464回答 3
3回答

慕田峪9158850

好的,我知道这个问题没有使用导航控制器,但没有理由不这样做。OP没有及时回应我的睡觉时间。不要投票给我。:)以下是使用导航控制器弹出当前视图控制器并翻转到新视图控制器的方法:UINavigationController *myNavigationController = self.navigationController;[[self retain] autorelease];[myNavigationController popViewControllerAnimated:NO];PreferencesViewController *controller = [[PreferencesViewController alloc] initWithNibName:nil bundle:nil];[UIView beginAnimations:nil context:NULL];[UIView setAnimationDuration: 0.65];[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myNavigationController.view cache:YES];[myNavigationController pushViewController:controller animated:NO];[UIView commitAnimations];[controller release];
打开App,查看更多内容
随时随地看视频慕课网APP