在一系列模态视图之后转换回第一个视图?

时间:2012-08-28 04:14:25

标签: ios uiview uiviewcontroller modalviewcontroller

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

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

前四个过渡完成如下:

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

从GameOver视图转换回菜单视图的最佳方式是什么,在仅显示一个动画过渡的同时解除和取消分配GameOver,Game和SelectDifficulty视图?

1 个答案:

答案 0 :(得分: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)Game Over dialog alpha - > 0.0f

    b)菜单层alpha - > 1.0f

  2. 执行基础dismissModalViewControllerAnimated(false)操作


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

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

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

    您可以通过设置UIWindow的{​​{1}}属性来切换活动视图控制器。

    新流程将类似于

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

    从游戏到菜单的转换变为:

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

      a)Game Over dialog alpha - > rootViewController

      b)将0.0f设置为菜单视图

    2. 执行基础rootViewController操作