我正在开发一个游戏,我想在几个视图之间转换,例如菜单屏幕、游戏屏幕、游戏结束屏幕等。这样做最简单的方法是什么?我不确定是否应该使用视图堆栈,因为视图显示的顺序并不总是相反。
2 回答
我假设“视图堆栈”是指 UINavigationController?
最简单的方法是将所有视图控制器的引用保存在某个地方,例如,我看到人们经常使用应用程序委托,因此您的应用程序委托的类扩展看起来有点像:
@interface AppDelegate ()
@property (nonatomic, strong) UIViewController *rootViewController; //this is what gets set as the window's root VC
@property (nonatomic, strong) UIViewController *mainScreenViewController;
@property (nonatomic, strong) UIViewController *gameScreenViewController;
@property (nonatomic, strong) UIViewController *gameOverScreenViewController;
@end
假设 rootViewController 只是控制应用程序其余部分的容器视图(尽管您实际上可能会很好地将所有这些逻辑放入根视图控制器中......)
现在,只要您需要显示某个屏幕,请调用如下方法:
- (void)switchToViewController:(UIViewController *)viewController
{
[self.rootViewController.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[self.rootViewController.view addSubview:viewController.view];
}
您现在可以编写名称更容易记住的方法,例如-switchToGameOverScreen
- (void)switchToGameOverScreen
{
[self switchToViewController:self.gameOverScreenViewController];
}
这种基本的视图导航模式大致可以在sUITabBarController
控制的视图中找到,并且经常出现在这些视图中UISegmentedControl
。
希望这会有所帮助!
如果你在 Cocos-2d 中开发游戏,场景之间的转换可以这样完成:
[[CCDirector sharedDirector] replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5f 场景:[GameOver 场景]]];
这里 GameOver 是一个新场景,它在过渡效果之后进入。
cocos-2d 中还有许多其他的过渡,用于从一个场景到另一个场景,即 0. CCTransitionCrossFade 1. CCTransitionFade 2. CCTransitionFadeBL 3. CCTransitionFadeDown 4. CCTransitionFadeTR 5. CCTransitionFadeUp 6. CCTransitionFlipAngular 7. CCTransitionFlipX 8. CCTransitionFlipY 9. CCTransitionJumpZoom 10. CCTransitionMoveInB 11. CCTransitionMoveInL 12. CCTransitionMoveInT 13. CCTransitionPageTurn 14. CCTransitionRadialCCW 15. CCTransitionRotoZoom 16. CCTransitionShrinkGrow 17. CCTransitionSlideInB 18. CCTransitionSlideInL 19. CCTransitionSlideInR 20. CCTransitionSlideInT 21. CCTransitionSplitCols 22. CCTransitionSplitRows 23. CCTransitionTurnOffTiles 24. CCTransitionZoomFlipAngular 25. CCTransitionZoomFlipX 26. CCTransitionZoomFlipY
谢谢