在cocos2d中添加UIViewController

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处理应用程序进入后台的方式.