添加的UIViewController在cocos2d
问题描述:
我想在cocos2d的项目中显示一个UIViewController,所以我在我的CCLayer类做到这一点:添加的UIViewController在cocos2d
-(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,但我想知道是否有更好的方式添加一个UIViewController在cocos2d场景,谢谢!
答
由于在cocos2d 2.0导演是如在AppDelegate中加载的导航控制器的根的UIViewController的一个子类,实际上存在能够利用非常简单的方式UIKit动画,如果你喜欢的话。它也使得场景完好无损,而不用担心内存管理。你可以改变你的-loadMyViewController方法是:
- (void)loadMyViewController {
myView = [[MyViewController alloc] init];
AppController *app = (AppController *)[[UIApplication sharedApplication] delegate];
[app.navController pushViewController:myView animated:YES];
[CCDirector sharedDirector].pause;
}
,然后简单地恢复导演和调用[app.navController popViewController ...]当你想返回到cocos2d的场景。或者,您可以在推送视图控制器而不是暂停时使用stopAnimation方法,与cocos2d处理进入背景的应用程序类似。
答
如果是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];
答
您可以使用一个简单的代码,如果你想弹出一个视图,只需要导入yourviewcontroller.h文件,并使用此代码,它支持所有的cocos2d版本
- (void)loadMyViewController {
yourviewcontroller *myView = [[yourviewcontroller alloc] init];
UIView *viewHost = myView.view;
[[[CCDirector sharedDirector] openGLView] addSubview:viewHost];
}
//更换屏幕上,如果你想减少内存使用,或只是暂停
答
或者您可以使用此代码..
ViewController *vc = [[ViewController alloc] init];
AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
[[app navController] presentModalViewController:vc animated:YES];
为避免泄漏,将MyViewController als childViewController添加到Director,并在添加后释放myView。在删除时,从超级视图中删除myView及其视图。 myView覆盖呈现CCNode的eaglview。所以你不需要推送和流行CCLayers。 – zeiteisen 2012-07-18 18:22:21
你能解答一下吗?谢谢,我在等待它! – Piero 2012-07-18 22:00:48