2008-10-26 9 views
5

que tienen código de animación en una clase que amplíe la UIView:¿Cómo hacer una animación flip entre más de dos UIViews?

código
// Start Animation Block 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:[self superview] cache:YES]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration:1.0]; 

//int nextView = currentView + 1; 
// Animations 
[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; 
//And so I would do: [[self superview exchangeSubviewAtIndex:currentView withSubviewAtIndex:nextView]; 
//Doesn't work because curentView is not global... with each instance of a class it's reset to what it's instanciated to. 
//currentView++; 

// Commit Animation Block 
[UIView commitAnimations]; 

Esta animación funciona bien para dos puntos de vista. Pero estoy tratando de hacer esto para muchos puntos de vista. He intentado mediante la adición de una variable global (índice NEXTVIEW y el índice CurrentView), sin embargo esto no funciona, ya que cada clase de vista personalizada tiene su propia instancia y estas variables no son compartidos.

¿Alguien sabe cómo puedo lograr lo que quiero hacer?

Gracias!

Editar: Me gustaría ser capaz de hacer esto, si podía usar [auto supervista] para acceder al índice de la CurrentView y del NEXTVIEW. ¿Hay algunos métodos para hacer esto?

Respuesta

0

creo una lista enlazada de puntos de vista podría ser lo que usted debe pensar en la implementación.

+0

Tengo una gran variedad de puntos de vista que se crea en el appdelegate y agrego un array diferente a cada controlador de vista de pestañas. Luego, el controlador usa esa matriz para crear uiviews con animación para alternar entre ellas. Tengo problemas con la animación alternando ... – rksprst

+0

No es necesario implementar una lista vinculada. 'NSArray' está perfectamente bien para eso. Si realmente le preocupa el rendimiento, lea [este artículo] (http://ridiculousfish.com/blog/?p=27). –

2

Si tiene punteros a las vistas a las que intenta cambiar, simplemente llame a -removeFromSuperview en la vista "desde" y -addSubview: (la vista "a") en la supervista. La transición no depende de ninguna llamada de método en particular; más o menos cualquier forma del enfoque "intercambiar dos vistas" se animará correctamente.

5

de Apple tiene un buen tutorial sobre las transiciones de vista here. Además de la forma en que los implementan, también se puede utilizar un UINavigationController que gestiona un conjunto de vistas y la transición entre ellas.

Esencialmente lo necesario para gestionar la transición en el supervista en lugar de la vista - la supervista puede saber quién ha tenido como muestra actualmente y quién es el siguiente.

Cuestiones relacionadas