在使用UINavigationController的setViewControllers:animated:方法时,如何实现过渡效果?

11

我通过以下方式将一组新的ViewControllers设置为我的导航控制器:

 MainMenuViewController *mainMenuViewController = [[MainMenuViewController alloc] init];
NSArray *controllerArray = [NSArray arrayWithObject:mainMenuViewController];
[mainMenuViewController release];
[self.navController setViewControllers:controllerArray animated:YES];

唯一的问题是我似乎无法设置过渡样式。理想情况下,我希望它翻转。这能实现吗?重要的是我要使用 setViewControllers:animated 而不是 presentModalViewController,因为我在堆栈之间来回切换,并希望保持每个导航控制行为。

1个回答

0

不妨维护两个导航控制器并在它们之间进行动画转换,而不是交换整个导航栈。这样看起来更加清晰。

更新

如果我知道你想要实现什么,我可能会提供更好的帮助。但是我知道你可以从第一个导航控制器模态地呈现第二个导航控制器,并在呈现前/后将一堆视图推入其中等等。此外,彻底替换现有的视图控制器堆栈,特别是如果它很深,可能会让用户感到困惑,更不用说苹果审核团队了。

在内存中维护两个导航控制器并不一定是大问题,只要你有足够的内存(你可能有),并且用户确实获得了好处。

也许你可以阐明一下你的高层目的,然后我们可以从那里开始。

更多

如果你想要翻转,则可以设置navController2.modalTranstitionStyle = UIModalTransitionStyleFlipHorizontal,这将导致navController2在以模态方式呈现时翻转进入。

SO 在我们下面发表评论时出现了一些奇怪的故障,可能会丢失你的更新。


我在这里做了类似的事情:http://stackoverflow.com/questions/9570225/how-to-swap-between-2-root-view-controllers,但似乎并不被鼓励。虽然我有一个导航控制器,每次都会重新初始化为新的rootViewController。那么拥有两个navControllers是好的实践吗?你不会同时将它们都保存在内存中吗? - Smikey
你可以这样做 - 我认为准备一个空的或者“短”的导航控制器不会有太大问题。你也可以尝试在需要时创建第二个导航控制器,就在你展示它之前。这可能会导致一些 UI 延迟,也可能不会。你需要测试一下看哪种方法更好。 - QED
这是我的最初方法,从延迟方面来看还不错。然而,当我从后台恢复应用程序时开始出现崩溃。只有在我在菜单和游戏之间切换并关闭应用程序时才会发生崩溃。否则它可以正常恢复。因此,我认为我的导航控制器处理可能有问题... - Smikey
我的最后两条评论似乎消失了,但您可以在此处详细查看我的原始问题:http://stackoverflow.com/questions/9570225/how-to-swap-between-2-root-view-controllers - Smikey
可能是这样...请阅读https://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html#//apple_ref/doc/uid/TP40011313-CH2-SW1中的“修改导航栈”部分。 - QED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接