2010-12-15 16 views
5

Estoy trabajando en una aplicación en la que me gustaría usar cocos2d en la pantalla de inicio de la aplicación, pero no en otro lugar (en otros lugares, el material UIKit estándar es más apropiado). Por lo tanto, tengo mi EAGLView configurada como la vista raíz en un UINavigationController, y cuando el usuario toca en el lugar correcto, coloco un nuevo controlador de vista en el controlador de navegación.cocos2d y UINavigationController trouble

Eso funciona muy bien, hasta ahora. Las cosas de cocos2d/chipmunk en la vista de inicio funciona de maravilla, empujando un nuevo controlador de vista que funciona como se esperaba.

Pero cuando vuelvo a la vista de inicio, no hay nada allí. Todo lo que veo es el fondo de la ventana y la barra de navegación.

Establecí un punto de interrupción en el controlador de la vista raíz -viewDidAppear: para ver qué sucede después del pop, y hasta ahora todo parece normal (o al menos igual que antes de la inserción).

El empuje es simplemente un impulso de controlador de navegación estándar de pantano. No veo ningún tipo de advertencia de memoria. Alguien tiene pensamientos sobre lo que está pasando?

Hay un proyecto de demostración simple que muestra este comportamiento en http://cl.ly/1Q050s0h2k47032K1Y1N

Esto se basa en la plantilla de proyecto cocos2d + ardilla. Toque Grossini y se inserta un nuevo controlador de vista en la pila. Toca el botón Atrás, y Grossini se va.

Y solo para hacerlo interesante, este problema solo existe en un dispositivo iOS (estoy ejecutando 4.1), no en el simulador.

+0

dudo que este es el problema, sino que están fugas de estos dos tipos: http://cl.ly/1J26180i383F3H0z3V2L –

+0

Ni siquiera estoy seguro de lo que son, pero no se ven relacionados. –

+0

Encontré que si mi -viewDidLoad llama -setNeedsLayout en el EAGLview, los objetos cocos2d se restauran y la vista principal es visible después de que el controlador de navegación aparece en la raíz. Sin embargo, hay un parpadeo notable, por un momento, los objetos cocos2d no son visibles, pero luego aparecen. Una versión modificada de mi demostración que incorpora esto está en http://cl.ly/1L423a1x27373t1q0s0y Esto se siente como progreso pero es un desagradable parpadeo. –

Respuesta

6

He resuelto su problema. Tienes que seguir algunos pasos en tu código.

En el archivo de punta RootViewController, cambie la vista Identidad de HomeView a UIView.

crear un hogar de visualización de objetos en el RootViewController Clase

@interface RootViewController : UIViewController { 
    HomeView *homeViewObj; 
} 

en el archivo RootViewController.m en el método viewDidLoad añadir este código

homeViewObj = [[HomeView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
[self.view addSubview:homeViewObj]; 

y reemplace este código en su método de viewDidLoad en el lugar requerido.

CCDirector *director = [CCDirector sharedDirector]; 

    // attach the openglView to the director 
    [director setOpenGLView:(EAGLView *)homeViewObj]; 

    [director setDeviceOrientation:kCCDeviceOrientationPortrait]; 
    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:YES]; 

A continuación, se resuelve el problema, Todo lo mejor.

Saludos,

Satya

+0

Gracias, eso solucionó el problema. Aunque no entiendo completamente por qué. ¿Puedes explicarlo en absoluto? –

+0

Tom, ejecuté el código y lo probé, encontré una cosa, cuando vuelves a la vista de inicio, no muestra el "EAGLView", pero está detectando los toques y realizando las operaciones. En el momento del doble toque, la vista fue a 2ndView Controller y luego hago clic atrás, luego se muestra el EAGLView. Luego entendí que algunas vistas están superpuestas en el "EAGLView", así que puse una vista normal en el InterfaceBuilder y agregué el EAGLView como sub-vista. Entonces el problema resuelto – Satya

+0

¡¡Hola !! Estaba buscando lo mismo, Thanx Satya –