1

我正在创建一个具有以下视图序列的简单游戏:

菜单 -> 选择难度 -> 游戏 -> 游戏结束 -> 菜单

前四个转换是这样完成的:

- (IBAction)newGame {
    // Transition to select difficulty view controller.
    [self presentModalViewController:[[SelectDifficultyViewController alloc] init] animated:YES];
}

最好的方法是从 GameOver 视图转换回菜单视图,并在只显示一个动画转换的同时关闭并解除分配 GameOver、Game 和 SelectDifficulty 视图?

4

1 回答 1

1

最好的方法可能涉及重构你的对话代码(注意:我并没有声称在这里提供最好的方法,你不应该要求最好的方法,因为这会引起争论)。模态对话框并不意味着长期存在。允许用户选择难度,然后隐藏游戏的对话框。游戏结束屏幕也可以是主应用程序窗口上的对话框。

在以下选项中,1 提供对所有应用程序状态的即时访问,但 2 更接近最佳实践,因为它将游戏逻辑与菜单导航/设置逻辑分开。


选项 1:将您的菜单和游戏视图合并到一个视图控制器中

您的主窗口的视图层次结构将是:

UIView (root view) --- UIView (menu layer) --- (all of your menu subviews)
                   \-- UIView (game layer) --- (all of your game subviews)

新流程将类似于

主视图(菜单层)-> 选择难度(模式)-> 主视图(游戏层)-> 游戏结束(模式)-> 主视图(菜单层)

然后从游戏到菜单的过渡变为:

  1. 这两者都发生在一个动画块中

    a) 游戏结束对话框 alpha ->0.0f

    b) 菜单层 alpha ->1.0f

  2. 执行底层dismissModalViewControllerAnimated(false)操作


选项 2:为您的菜单和游戏视图设置单独的视图控制器

您的主窗口的视图层次结构将是:

UIViewController (root) --- UIView (menu view) --- (all your menu subviews)
UIViewController        --- UIView (game view) --- (all your game subviews)

您可以通过设置UIWindow'rootViewController属性在活动视图控制器之间切换。

新流程将类似于

菜单视图->选择难度(模式)->游戏视图->游戏结束(模式)->菜单视图

然后从游戏到菜单的过渡变为:

  1. 这两者都发生在一个动画块中

    a) 游戏结束对话框 alpha ->0.0f

    b) 设置rootViewController为菜单视图

  2. 执行底层dismissModalViewControllerAnimated(false)操作

于 2012-08-28T04:42:30.713 回答