我正在制作多人游戏。我的第一个屏幕,应显示登录表单(非模态)。当它完成时,它应该调用一个委托给我的“根类”,“根类”应该删除这个视图控制器并添加另一个。然后当游戏结束时,将使用另一个委托方法调用“根类”,它应该显示另一个屏幕等..
我有3个想法,我想知道哪个会更好。
a)我的根类是一个uiviewcontroller,它在调用委托方法时添加/删除子视图。
b)我的根类是NSObject子类,它必须在必要时更改窗口rootViewControoler。
c)没有导航栏的导航控制器。但我如何管理观点层次?
管理我的视图hieararchy有什么更好的逻辑?除了a和b之外还有其他想法吗?
答案 0 :(得分:1)
a)或b)都可以。选择取决于诸如模型层用于确定视图呈现顺序的程度之类的因素。如果表示序列是动态的,那么辅助类设计(您的选项b)在MVC分离方面可能更纯。最终,决定取决于您的应用程序的细节和复杂性。
一般来说,我在做出这样的设计决定时会问一些问题:
答案 1 :(得分:0)
在你提出的选项中,我喜欢c)最好的。
选项a)不合适,因为它忽略了视图控制器的主要部分 - 管理内容的整页视图。在像你这样的情况下使用addSubview
要求你跳过一堆障碍,以便管理视图层次结构中所有这些对象的内存,你最终会重新发明UIViewController
轮。 / p>
选项b)没问题,但不知何故它似乎永远不会让我满意。只是在willy-nilly中交换根目录似乎有风险 - 这就是UIViewController要做的事情,它可能会比你或我做得更好。无论如何,如果你这样做,你将失去动画的任何好处。这带给我们......
选项c)。 UINavigationController被编程为完成您特定情况所需的工作。您可以使用UINavigationController
的- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
来管理层次结构。你可以做一个正常的推送,但是当主游戏VC位于前面并需要来自系统的资源时,这将使之前的VC保持在内存中。简而言之,我认为你的c)简单有效。
与此处的帖子脚本一样,请注意除了a,b,c之外还有其他选择。你可能会使用UIPageViewController,虽然我不推荐它。 iOS 5引入了UIStoryboard作为管理应用UI的方法,并UIStoryboardSegue来管理转换。查看文档,如果您的目标是iOS 5,它们也可以为您提供帮助。但听起来简单的导航控制器对你有用。