我想在 cocos2d 项目中显示 UIViewController,所以我在我的 CCLayer 类中执行此操作:
-(void)displayMainMenu {
CGSize screenSize = [CCDirector sharedDirector].winSize;
[CCMenuItemFont setFontName:@"Marker Felt"];
[CCMenuItemFont setFontSize:26];
CCMenuItemFont *openViewC = [CCMenuItemFont itemWithString:@"Open View" target:self selector:@selector(loadMyViewController)];
mainMenu = [CCMenu menuWithItems:openViewC, nil];
[self addChild:mainMenu z:0];
}
-(void) loadMyViewController{
//Add the tableview when the transition is done
myView = [[MyViewController alloc] init];
UIView *viewHost = hostView.view;
[[[CCDirector sharedDirector] view] addSubview:viewHost];
}
然后在我的 ViewController 中返回到我的 CCLayer 我这样做:
- (IBAction)exitAction:(id)sender
{
[self.view removeFromSuperview];
[[CCDirector sharedDirector] pushScene: [MainMenu scene]]; //i need it or not?
}
所有工作,我使用cocos2d v2.0,但我想知道是否有更好的方法在cocos2d场景中添加UIViewController,谢谢!
由于cocos2d 2.0中的director是UIViewController的子类,作为AppDelegate中加载的导航控制器的根,因此实际上有一种非常简单的方法可以利用UIKit动画,如果您愿意的话。它还使场景保持完整,而无需真正担心内存管理。您可以将 -loadMyViewController 方法更改为:
- (void)loadMyViewController {
myView = [[MyViewController alloc] init];
AppController *app = (AppController *)[[UIApplication sharedApplication] delegate];
[app.navController pushViewController:myView animated:YES];
[CCDirector sharedDirector].pause;
}
然后当你想返回到cocos2d场景时,只需恢复director并调用[app.navController popViewController...]即可。或者,您可以在推动视图控制器时使用 stopAnimation 方法而不是暂停,类似于 cocos2d 处理应用程序进入后台的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)