我在做一个多人游戏。我的第一个屏幕,应该显示一个登录表单(非模态)。当它结束时,它应该调用一个委托给我的“根类”,“根类”应该删除这个视图控制器,并在游戏结束时添加another.Then。“根类”将用另一个委托方法调用,它应该显示另一个屏幕,等等。
我有3个想法,我想知道哪一个会更好。
a)我的根类是一个uiviewcontroller,它在调用委托方法时添加/删除子视图。
b)我的根类是NSObject子类,它会在必要时更改窗口rootViewControoler。
c)没有导航栏的导航控制器。但是我如何管理视图层次呢?
有什么更好的逻辑来管理我的视图层次结构?除了a和b还有别的主意吗?
发布于 2012-03-12 21:18:54
在你提出的选项中,我最喜欢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,它们可能也会对你有所帮助。但这听起来像是一个简单的导航控制器将为您工作。
发布于 2012-03-12 21:17:52
a)或b)都是可行的。选择将取决于一些因素,如使用模型层来确定视图呈现顺序的程度。如果表示序列是动态的,那么helper类设计(您的选项b)在MVC分离方面可能更纯粹。最终,决定取决于应用程序的细节和复杂性。
一般来说,我在做出这样的设计决策时会问一些问题:
来最小化dependencies
https://stackoverflow.com/questions/9665911
复制相似问题