Cómo voltear una UIView individual (sin voltear la vista primaria)

Este es un proyecto de iPad donde tengo una UIView con varias subViews, y estoy intentando animar una de estas UIViews usando [UIView transitionFromView: toView: duration: options: completion], pero cuando ejecuto este método, la vista principal completa se invierte ¡! Este es el código que estoy usando:

UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 300, 300)]; [newView setBackgroundColor:[UIColor networkingColor]]; [UIView transitionFromView:self.firstView.view toView:secondView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil]; 

¿Alguna idea sobre cómo puedo cambiar entre estas vistas sin animar la vista principal completa? ¡Gracias!

este código puede ayudarlo a:

coloque las dos vistas que desea voltear dentro de una vista sin nombre con el mismo tamaño y enlace el IBOutlet UIView *newView,*oldView; a las vistas y poner la nueva vista en la parte superior

 bool a = NO; @implementation ViewController - (IBAction)flip:(id)sender { if (a == NO) { [UIView transitionFromView:oldView toView:newView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; a = YES; // a = !a; } else { [UIView transitionFromView:newView toView:oldView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; a = NO; // a = !a; } } 

Tuve problemas para hacer que esto funcione también. Utilicé el código escrito por Floris, pero aunque funcionó para el primer "flip", el siguiente flip comenzó a ser extraño, donde los botones y las tags en la interfaz de usuario de la interfaz de usuario perdieron posiciones.

Puse el código a continuación en su lugar y está funcionando bien.

Un par de cosas a tener en count:

  1. panelView es un control UIView en el ViewController que tiene otras dos UIViews anidadas dentro de él (subvistas). El primero se llama frontView, el segundo se llama backView. (ver la image a continuación)

imagen de la vista y las subvenciones en IB

  1. Tengo una propiedad bool llamada displayingFront en la class

(en mi .h)

 @property BOOL displayingFront; 

en mi .m

 @synthesize displayingFront; 

en mi vista el método DidLoad

 self.displayingFront = YES; 

Este es el código en el .m que he configurado con los dos botones si UIViews frontal y posterior …

 - (IBAction)flip:(id)sender { [UIView transitionWithView:self.panelView duration:1.0 options:(displayingFront ? UIViewAnimationOptionTransitionFlipFromRight : UIViewAnimationOptionTransitionFlipFromLeft) animations: ^{ if(displayingFront) { self.frontView.hidden = true; self.backView.hidden = false; } else { self.frontView.hidden = false; self.backView.hidden = true; } } completion:^(BOOL finished) { if (finished) { displayingFront = !displayingFront; } }]; } 

Use una vista de contenedor para mantener sus sub-vistas y haga que la vista de contenedor sea del mismo tamaño que su sub-vista que está intentando animar.

Entonces, puedes configurar tus vistas de esta manera.

self.view-> "una vista de contenedor" -> subvenciones

 **//flipping view continuously** bool a = NO; -(void)viewDidLoad { // THIS is the canvass holding the two views this view is flipping UIView *v=[[UIView alloc]initWithFrame:CGRectMake(40, 40, 150, 150)]; v.backgroundColor=[UIColor clearColor]; [self.view addSubview:v]; [v addSubview:yourfirstview]; [v addSubview:yoursecondview]; // calling the method [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(flip) userInfo:nil repeats:YES]; } //flipping view randomly -(void)flip { if (a == NO) { [UIView transitionFromView:yourfirstview toView:yoursecondview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; a = YES; } else if(a==YES) { [UIView transitionFromView:yoursecondview toView:yourfirstview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; a = NO; } } 

Reparé este problema usando animaciones de la vieja escuela:

 [UIView beginAnimations:@"Flip" context:nil]; [UIView setAnimationDuration:1]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:firstView cache:YES]; [self addSubview:secondView]; [UIView commitAnimations]; 

Además, puede eliminar la primera vista:

 [firstView removeFromSuperview];