在cocos2d中添加UIViewController

我想在一个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中加载的导航控制器的根,实际上有一个非常简单的方法可以使用UIKitanimation,如果你愿意的话。 它也使得场景完好无损,而不用担心内存pipe理。 你可以改变你的-loadMyViewController方法:

 - (void)loadMyViewController { myView = [[MyViewController alloc] init]; AppController *app = (AppController *)[[UIApplication sharedApplication] delegate]; [app.navController pushViewController:myView animated:YES]; [CCDirector sharedDirector].pause; } 

然后简单地恢复导演,当你想返回到cocos2d场景时,调用[app.navController popViewController …]。 或者,您可以在推送视图控制器而不是暂停时使用stopAnimation方法,类似于cocos2d处理进入背景的应用程序。

如果要popup视图,可以使用简单的代码,只需导入yourviewcontroller.h文件并使用支持所有cocos2d版本的代码

 - (void)loadMyViewController { yourviewcontroller *myView = [[yourviewcontroller alloc] init]; UIView *viewHost = myView.view; [[[CCDirector sharedDirector] openGLView] addSubview:viewHost]; 

}

//如果您想要减less内存使用或暂停,请更换屏幕

如果是cocos2D 2.0,那就用这个。

 AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; [app.navController.view addSubview:newView]; 

贝娄cocos2d 2.0

 AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate]; [app .viewController.view addSubview:newView]; 

或者你可以使用这个代码..

 ViewController *vc = [[ViewController alloc] init]; AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; [[app navController] presentModalViewController:vc animated:YES];