【问题标题】:Architecture of view hierarchy - iPhone视图层次结构 - iPhone
【发布时间】:2012-03-12 11:05:48
【问题描述】:

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

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

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

b) 我的根类是 NSObject 子类,它会在必要时更改窗口 rootViewControler。

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

管理视图层次结构的更好逻辑是什么?除了 a 和 b 之外还有什么想法吗?

【问题讨论】:

  • 你尝试了什么?成功了吗?

标签: iphone ios cocoa uiviewcontroller


【解决方案1】:

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

一般来说,我在做出这样的设计决策时会问一些问题:

  • 它如何影响内存管理
  • 设计将如何影响性能
  • 设计是否恰当地分离关注点
  • 设计是否灵活?它是否最小化依赖关系
  • 设计是否利用了框架/平台设计模式

【讨论】:

    【解决方案2】:

    在您提供的选项中,我最喜欢 c)。

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

    选项 b) 没问题,但不知何故,它似​​乎从来没有让我满意。只是随意地交换根目录似乎是有风险的——这就是 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,它们也可能对您有所帮助。但听起来一个简单的导航控制器会为您工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多