2008-11-21 22 views
9

Estoy intentando crear una transición de encargo, para servir como un reemplazo para una transición predeterminada que se obtiene aquí, por ejemplo:vista personalizada de transición en OpenGL ES

[self.navigationController pushViewController:someController animated:YES]; 

He preparado un basados ​​en OpenGL vista que realiza un efecto sobre cierta textura estática asignada a un plano (digamos que es una copia del efecto de volteo en Core Animation). Lo que no sé hacer es:

  • agarrar contenido de vista actual y crea una textura fuera de él (Recuerdo haber visto una función que hace precisamente eso, pero no lo encuentra)
  • cómo hacer lo mismo para la vista que actualmente está fuera de pantalla y va a reemplazar la vista actual
  • hay algunas API a las que puedo conectar para hacer que mi clase de transición sea lo más nativa posible (conviértalo en un tipo de efecto de animación central) ?

¡Cualquier pensamiento o vínculo es muy apreciado!

ACTUALIZACIÓN

respuesta de Jeffrey Forbes funciona muy bien como una solución para capturar el contenido de una vista.

Lo que no he descubierto aún es cómo capturar el contenido de la vista que quiero pasar a la transición, que debería ser invisible hasta que se complete la transición.

Además, ¿qué método debo usar para presentar la vista OpenGL? Para fines de demostración, utilicé pushViewController. Eso afecta a la barra de navegación, sin embargo, que en realidad quiero ir un elemento atrás, con animación, compruebe este video para obtener una explicación:

http://vimeo.com/4649397.

Otra opción sería ir con presentViewController, pero eso muestra pantalla completa. ¿Crees que crear otra ventana (o vista) podría ser útil?

Respuesta

3

Aunque no puedo responder por completo a su pregunta sin hacer más investigación de la mía, me puede ayudar un poco:

-Con el fin de obtener la opinión de un UINavigationController, es necesario tomar una captura de pantalla. La forma más sencilla de hacer esto es por el acaparamiento en una UIImage:

UIGraphicsBeginImageContext(self.view.frame.size); 
[[self.view layer] renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* test = UIGraphicsGetImageFromCurrentImageContext(); 
UIImageView* view = [[UIImageView alloc] initWithImage:test]; 
UIGraphicsEndImageContext(); 

No estoy seguro de si se puede hacer que un GLContext (no familiar en el teléfono) en una CGImage, pero me gustaría hacer algo así (e inicie un UIImage a partir de eso). Presentaría cada fotograma de la animación que intentas hacer e incluirlo en un UIImageView usando las cosas de animación que se incluyen en él. Es decir, si tu animación es lo suficientemente simple. De lo contrario, podría reducirse a escribir su propia función de animación: -/

+0

Gracias por su consejo y lo siento por mi reacción lenta extra! ¿Podrías consultar la pregunta actualizada, quizás tengas algún otro consejo? – melfar

1

Creo que la función que podría estar pensando es http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xml ... configura la ventana gráfica para el tamaño de la textura y luego dibuje como de costumbre, luego haga glCopyTexImage2D para copiar la escena en una textura.

o debe mirar dentro de objetos FrameBuffer. La plantilla predeterminada de OpenGL en XCode los usa. Simplemente genere el proyecto de ejemplo para ver cómo funcionan.

3

Acabo de armar una clase de transición para implementar su propia animación de transición en OpenGL ES.

no dude en leer sobre ello here

Hay dos transiciones de ejemplo en el proyecto, no dude en añadir es el propietario de la misma.

0

Recientemente escribí algunas animaciones de transición entre controladores de vista como usted. Si desea obtener cualquier información adicional desde el punto de vista invisible, puede intentar retrasar la transición de esta manera:

- (void)animationFromModalView:(UIView *)modalView toMasterView:(UIView *)masterView 
{ 

[masterView setNeedsLayout]; 
[masterView layoutIfNeeded]; 

[self performSelector:@selector(delayAnimationFromModalViewToMasterView) withObject:nil afterDelay:.1f]; 
} 
Cuestiones relacionadas