如何以编程方式在视图之间转换?

时间:2012-08-27 00:38:30

标签: ios cocoa-touch uiview uiviewcontroller segue

我正在开发一款游戏,我希望在多个视图之间进行转换,例如:菜单屏幕,游戏屏幕,游戏结束等等。最简单的方法是什么?我不确定是否应该使用视图堆栈,因为显示视图的顺序并不总是相反。

2 个答案:

答案 0 :(得分:1)

我认为“视图堆栈”是指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];
} 

这种基本的视图导航模式大致位于UITabBarController中,通常位于由UISegmentedControl控制的视图中。

希望这有帮助!

答案 1 :(得分:0)

如果您正在使用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

由于