我正在创建一个具有以下视图序列的简单游戏:
菜单 - >选择难度 - >游戏 - >游戏结束 - >菜单
前四个过渡完成如下:
- (IBAction)newGame {
// Transition to select difficulty view controller.
[self presentModalViewController:[[SelectDifficultyViewController alloc] init] animated:YES];
}
从GameOver视图转换回菜单视图的最佳方式是什么,在仅显示一个动画过渡的同时解除和取消分配GameOver,Game和SelectDifficulty视图?
答案 0 :(得分:1)
最好的方法可能包括重构你的对话框代码(注意:我不声称在这里提出最好的方法,你不应该要求最好的方式,因为这会引起辩论)。模态对话框并不意味着坚持不懈;允许用户选择难度,然后隐藏游戏对话框。屏幕上的游戏也可以是主应用程序窗口上的对话框。
在以下选项中,1提供对所有应用程序状态的即时访问,但是2更接近最佳实践,因为它将游戏逻辑与菜单导航/设置逻辑分开。
选项1:将菜单和游戏视图合并到一个视图控制器中
您的主窗口的视图层次结构将是:
UIView (root view) --- UIView (menu layer) --- (all of your menu subviews)
\-- UIView (game layer) --- (all of your game subviews)
新流程将类似于
主视图(菜单层) - >选择难度(模态) - >主视图(游戏层) - >游戏结束(模态) - >主视图(菜单层)
从游戏到菜单的转换变为:
这两个都发生在一个动画块中
a)Game Over dialog alpha - > 0.0f
b)菜单层alpha - > 1.0f
执行基础dismissModalViewControllerAnimated(false)
操作
选项2:为菜单和游戏视图设置单独的视图控制器
您的主窗口的视图层次结构将是:
UIViewController (root) --- UIView (menu view) --- (all your menu subviews)
UIViewController --- UIView (game view) --- (all your game subviews)
您可以通过设置UIWindow
的{{1}}属性来切换活动视图控制器。
新流程将类似于
菜单视图 - >选择难度(模态) - >游戏视图 - >游戏结束(模态) - >菜单视图
从游戏到菜单的转换变为:
这两个都发生在一个动画块中
a)Game Over dialog alpha - > rootViewController
b)将0.0f
设置为菜单视图
执行基础rootViewController
操作