Cómo voltear un UIView individual (sin voltear la vista principal)

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

UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 300, 300)]; [newView setBackgroundColor:[UIColor redColor]]; [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? ¡Gracias!

este código puede ayudarte a:

coloque las dos vistas que desea voltear dentro de una vista sin nombre con el mismo tamaño y vincule 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. Usé el código escrito por Floris, pero a pesar de que funcionó para el primer “flip”, el siguiente flip comenzó a ser raro, donde los botones y las tags en la interfaz frontal UI View perdieron posiciones.

Puse el código a continuación en su lugar y funciona bien.

Un par de cosas para tener en cuenta:

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

imagen de la vista y las subvistas en IB

  1. Tengo una propiedad bool llamada displayingFront en la clase

(en mi .h)

 @property BOOL displayingFront; 

en mi .m

 @synthesize displayingFront; 

en mi método viewDidLoad

 self.displayingFront = YES; 

Este es el código en el .m que he manipulado hasta los dos botones si UIViews delante y detrás …

 - (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 guardar sus subvistas, y haga que la vista del contenedor tenga el mismo tamaño que su subvista que está tratando de animar.

Por lo tanto, puede configurar sus puntos de vista de esta manera.

self.view-> “una vista de contenedor” -> subvistas

 **//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; } } 

Solucioné 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, puedes eliminar la primera Vista:

 [firstView removeFromSuperview];