2011-02-02 84 views
1

我已经创建了几个iPhone和iPad应用程序,但是我已经用另一个支持api或者像Cocos2d这样的开源库来编写它们,支持场景管理和屏幕转换。我不觉得我已经弄清楚如何在没有这些外部API的情况下完成屏幕/场景/视图管理假设。有人可以很简单地,但清楚地解释一个应用程序将如何管理屏幕过渡和/或指向我一个很好的参考,以尽可能少的混乱来证明这一点?iOS中的视图管理

我应该使用UIViewController派生类来分隔我的应用程序的屏幕上的功能(除了已经打算处理导航控制器等多屏幕操作的功能)?而且,我的应用程序基本上会将控制权交给这些视图控制器之一,然后这些视图控制器将使用其组件(如标签,按钮,任何视图)构建场景。如何切换到相关的视图控制器,并且我应该期望loadView作为结果被调用?然后,当某些触发器要求移动到屏幕B时,会调用“转换”我的视图,然后调用其他视图控制器来“设置视图”并将它们转换为?

如果有一个示例程序可以真实地说明这一点,最好不使用接口构建器,那将是理想的。

回答

7

我应该使用 的UIViewController派生类 分开我的应用程序的屏幕,通过屏幕 功能?

是的。

而且将我的应用程序基本上是手工 控制权交给这些视图 控制器,然后这将构建 我的场景,它的组件之一?

是的,尽管很多风险投资公司只是从笔尖获取他们的视图树,并且关注核心控制者的责任:1。将模型变化传播到各种视野中;以及2.将视图事件传播回模型上的适当操作。我建议获取InterfaceBuilder的挂件。这是不完美和烦人的,但它可以节省您的工作时间和代码量。

如何切换到相关视图控制器?

的许多方式:

  • 如果你的风险投资商在导航控制器托管,[[self navigationController] pushViewController:theNextVC animated:YES]是一种常见的成语。
  • 在一组风险投资组合之间切换时,最好用UITabBarController完成。
  • 如果你想做模态叠加,[self presentModalViewController:theNextVC animated:YES]是如何。然而,比一两个更深的Modal堆栈变得笨拙。
  • 通过将它分配给你的窗口的rootViewController属性(应用程序委托可以做到这一点,或主要的笔尖可以),在4.x中完成第一个VC的呈现。或通常在应用代理中找到的传统方式4之前的版本:[myMainWindow addSubview:[myInitialVC view]]
  • 一些专门的苹果提供的VC(视频,照片选择器)有他们自己的演示方法。

请注意,对于前两种方法,如果您想要的行为而不是UI小部件,您可以隐藏导航栏或选项卡栏并以编程方式执行所有操作。

我应该期待loadView被调用吗?

它会,但大部分的“我现在出现!”逻辑属于viewWillAppear:(在过渡动画开始之前调用,当视图没有父项时)以及viewDidAppear:(在动画完成后,在视图完全可见时调用)。loadView仅在VC认为视图很快需要时调用一次,并且不会再次调用,除非内存不足情况转储视图并需要重新创建。

覆盖loadView当你想用一些其他视图树构造方法完全替换nib加载。我开始这样做,但很少这样做。

覆盖viewDidLoad当你仍然想要正常的笔尖加载发生,但也想做一些你自己的视图树构造/后处理。这是我发现自己在99%的时间内完成的。

当某些触发器要求移动到屏幕B时,会调用“转换”我的视图,然后调用其他视图控制器来“设置视图”并将它们转换为?

如果您使用前面列出的任何演示方法,则会发生过渡。所有你需要做的是实现viewWill/DidAppear和朋友,当它发生时被告知。

您可能希望调查“TheElements”示例项目(在xcode文档中搜索“元素”)根据要求,它不使用nibs;它以艰难的方式设置了代码中的所有内容。它有很好的使用TabBarController和NavigationController的例子,并且或多或少以推荐的方式在VC之间分割责任。

+0

哇,很多的话。随意编辑这个只是你发现有用的位,如果有的话。 – rgeorge 2011-02-02 06:10:43

1

您有2个基本控制器,UITabBarController或UINavigationController的基本选项。 (你可以在UITabBarController中放置一个UINavigationController,但不能以其他方式)。

如果你有一个UITabBarController,最简单的做法是为每个选项卡分配不同的视图控制器(UIViewController子类)。 UITabBarController将处理它们之间的转换并调用诸如viewWillAppear之类的方法。

使用UINavigationController,您可以设置rootViewController。该视图控制器然后负责呼叫[self.navigationController pushViewController:animated:]。这通常使用UITableViewController完成。 UINavigationController将调用像viewWillAppear这样的方法。

呈现视图控制器的最后一个选项是以模态方式呈现它。这是屏幕弹出来填满屏幕的地方。您可以将其设置为从底部开始,翻转或淡入。为此,请创建视图控制器并致电-[UIViewController presentModalViewController:animated:]

除此之外,大多数视图控制器一次在屏幕上(iPad除外)。使用子类UITableView和UIScrollView或者只是UITableView。每个视图控制器应该独立于它的容器。这意味着你可以在UINavigationController上推动相同的视图控制器,或者将其设置为UITabBarController上的选项卡或以模态方式呈现它。