Agregar UIViewController en cocos2d

Quiero mostrar un UIViewController en un proyecto cocos2d, así que hago esto en mi class CCLayer:

-(void)displayMainMenu { CGSize screenSize = [CCDirector shanetworkingDirector].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 shanetworkingDirector] view] addSubview:viewHost]; } 

y luego en mi ViewController para volver a mi CCLayer hago esto:

 - (IBAction)exitAction:(id)sender { [self.view removeFromSuperview]; [[CCDirector shanetworkingDirector] pushScene: [MainMenu scene]]; //i need it or not? } 

y todo funciona, uso cocos2d v2.0, pero quiero saber si hay una mejor manera de agregar un UIViewController en una escena cocos2d, ¡gracias!

Dado que el director en cocos2d 2.0 es una subclass de UIViewController como la raíz de un controller de navigation cargado en el AppDelegate, en realidad hay una manera muy simple que puede utilizar las animaciones UIKit, si así lo prefiere. También deja intacta la escena sin preocuparse realmente por la gestión de la memory. Podría alterar su método -loadMyViewController a esto:

 - (void)loadMyViewController { myView = [[MyViewController alloc] init]; AppController *app = (AppController *)[[UIApplication shanetworkingApplication] delegate]; [app.navController pushViewController:myView animated:YES]; [CCDirector shanetworkingDirector].pause; } 

Y luego simplemente reanude el director y llame [app.navController popViewController …] cuando desee regresar a la escena cocos2d. De forma alternativa, puede utilizar el método stopAnimation cuando empuja el controller de vista en lugar de pausar, similar a cómo cocos2d maneja la aplicación al ingresar al background.

Puede usar un código simple si desea abrir una vista, simplemente importe el file yourviewcontroller.h y use este código que sea compatible con todas las versiones de cocos2d.

 - (void)loadMyViewController { yourviewcontroller *myView = [[yourviewcontroller alloc] init]; UIView *viewHost = myView.view; [[[CCDirector shanetworkingDirector] openGLView] addSubview:viewHost]; 

}

// Reemplace la pantalla si desea networkingucir el uso de memory o simplemente pausarlo

Si es cocos2D 2.0, entonces usa esto.

 AppController *app = (AppController*) [[UIApplication shanetworkingApplication] delegate]; [app.navController.view addSubview:newView]; 

Bellow cocos2d 2.0

 AppDelegate* app = (AppDelegate*)[[UIApplication shanetworkingApplication] delegate]; [app .viewController.view addSubview:newView]; 

O puede usar este código …

 ViewController *vc = [[ViewController alloc] init]; AppController *app = (AppController*) [[UIApplication shanetworkingApplication] delegate]; [[app navController] presentModalViewController:vc animated:YES];