视图层次结构 – iPhone

我正在制作一个多人游戏。 我的第一个屏幕,应显示登录表单(非模态)。 当它完成时,它应该调用一个委托给我的“根类”,“根类”应该删除这个视图控制器并添加另一个。然后当游戏结束时,将使用另一个委托方法调用“根类”,它应该显示另一个屏幕等..

我有3个想法,我想知道哪个会更好。

a)我的根类是一个uiviewcontroller,它在调用委托方法时添加/删除子视图。

b)我的根类是NSObject子类,它必须更改窗口rootViewControoler。

c)没有导航栏的导航控制器。 但我如何管理视图层次结构呢?

什么是更好的逻辑来管理我的观点hieararchy? 除了a和b之外的任何其他想法?

在你提出的选项中,我喜欢c)最好的。

选项a)不足,因为它忽略了视图控制器的主要部分 – 管理内容的整页视图。 在像你这样的情况下使用addSubview需要你跳过一堆障碍来管理视图层次结构中所有这些对象的内存,你最终会重新发明UIViewController轮。

选项b)没问题,但不知何故它似乎永远不会让我满意。 只是在willy-nilly中交换根目录似乎有风险 – 这就是UIViewController的目的,它可能会比你或我做得更好。 无论如何,如果你这样做,你将失去动画的任何好处。 这让我们…

选项c)。 UINavigationController被编程为完成您特定情况所需的工作。 您可以使用UINavigationController- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated来管理层次结构。 你可以做一个正常的推送,但是当你的主要游戏VC坐在前面并需要来自系统的资源时,这将使之前的VC保持在内存中。 简而言之,我认为你的c)简单有效。

与此处的post脚本一样,请注意除了a,b,c之外还有其他选择。 你可能会使用UIPageViewController ,虽然我不推荐它。 iOS 5引入了UIStoryboard作为管理应用UI的方法, UIStoryboardSegue用于管理转换。 查看文档,如果您的目标是iOS 5,他们也可以为您提供帮助。 但听起来简单的导航控制器对你有用。

a)或b)都可以。 选择取决于诸如模型层用于确定视图呈现顺序的程度之类的因素。 如果表示序列是动态的,那么辅助类设计(您的选项b)在MVC分离方面可能更纯。 最终,决定取决于您的应用程序的细节和复杂性。

通常,在做出如下设计决策时我会问一些问题:

  • 它如何影响内存管理
  • 设计将如何影响性能
  • 设计是否适当地区分了问题
  • 设计灵活吗? 它是否最小化依赖性
  • 设计是否利用框架/平台设计模式