Pie*_*ero 3 iphone uiviewcontroller cocos2d-iphone ios
我想在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];
}
Run Code Online (Sandbox Code Playgroud)
然后在我的ViewController中返回我的CCLayer我这样做:
- (IBAction)exitAction:(id)sender
{
[self.view removeFromSuperview];
[[CCDirector sharedDirector] pushScene: [MainMenu scene]]; //i need it or not?
}
Run Code Online (Sandbox Code Playgroud)
和所有的工作,我使用cocos2d v2.0,但我想知道是否有更好的方法在cocos2d场景中添加UIViewController,谢谢!
小智 9
由于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;
}
Run Code Online (Sandbox Code Playgroud)
然后只需恢复导演并在想要返回cocos2d场景时调用[app.navController popViewController ...].或者,您可以在推动视图控制器而不是暂停时使用stopAnimation方法,类似于cocos2d处理应用程序进入后台的方式.