2012-03-12 59 views
0

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

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

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

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

c)无导航栏的导航控制器。但我如何管理视图hiearchy?

什么是更好的逻辑来管理我的看法hieararchy?除了a和b以外的其他想法?

+0

你试过什么?任何成功? – QED 2012-03-20 01:56:44

回答

0

您提供的选项中,我喜欢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,它们也可能会对您有所帮助。但它听起来像一个简单的导航控制器将为你工作。

1

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

一般地,一些像这样的设计决策,当我问的问题:

  • 它是如何影响内存管理
  • 设计如何影响性能
  • 设计合适分别关注
  • 设计灵活?是否最小化依赖关系
  • 设计利用框架/平台设计模式