3

我想在 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,谢谢!

4

4 回答 4

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;
}

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

于 2012-07-19T01:57:55.740 回答
2

如果你想弹出一个视图,你可以使用一个简单的代码,只需导入 yourviewcontroller.h 文件并使用支持所有 cocos2d 版本的代码

- (void)loadMyViewController {

     yourviewcontroller  *myView = [[yourviewcontroller alloc] init];

     UIView *viewHost = myView.view;

    [[[CCDirector sharedDirector] openGLView] addSubview:viewHost];

}

//如果你想减少内存使用或只是暂停它,更换屏幕

于 2012-10-09T14:04:16.953 回答
1

或者您可以使用此代码..

ViewController *vc = [[ViewController alloc] init];

AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];

[[app navController] presentModalViewController:vc animated:YES];
于 2012-10-11T06:53:01.817 回答
1

如果是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];
于 2012-07-18T12:10:38.860 回答