objective-c ios uiviewanimation uiviewanimationtransition

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



objective-c ios (5)

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!


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];


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 etiquetas 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)
  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


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


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