Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在cocos2d中添加UIViewController_Iphone_Ios_Uiviewcontroller_Cocos2d Iphone - Fatal编程技术网

Iphone 在cocos2d中添加UIViewController

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

我想在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?
}

所有的工作,我都使用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控件获取回调等吗?