Iphone 在cocos2d中添加UIViewController
我想在cocos2d项目中显示UIViewController,因此我必须在我的CCLayer类中执行此操作:Iphone 在cocos2d中添加UIViewController,iphone,ios,uiviewcontroller,cocos2d-iphone,Iphone,Ios,Uiviewcontroller,Cocos2d Iphone,我想在cocos2d项目中显示UIViewController,因此我必须在我的CCLayer类中执行此操作: -(void)displayMainMenu { CGSize screenSize = [CCDirector sharedDirector].winSize; [CCMenuItemFont setFontName:@"Marker Felt"]; [CCMenuItemFont setFontSize:26]; CCMenuItemFont *o
-(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?
}
所有的工作,我都使用COCOS2D2V2.0,但我想知道是否有更好的方法在cocos2d场景中添加UIViewController,谢谢 如果它是cocos2D 2.0,那么使用它
AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
[app.navController.view addSubview:newView];
贝娄COCOS2D2.0
AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[app .viewController.view addSubview:newView];
由于cocos2d2.0中的控制器是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场景时,只需恢复控制器并调用[app.navController popViewController…]。或者,当您按下视图控制器而不是暂停时,您可以使用stopAnimation方法,类似于cocos2d处理进入后台的应用程序的方式。如果您想弹出视图,只需导入ViewController.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添加到控制器,并在添加myView后释放myView。移除时,从superview中移除myView及其视图。myView包含渲染CCN节点的eaglview。所以你不需要推送和弹出cclayer。你能在回答中更好地解释一下吗?谢谢,我在等着呢!您仍然可以从cocos2d节点内的uikit控件获取回调等吗?