2009-05-09 8 views
15

tenga en cuenta el siguiente código y dígame qué estoy haciendo mal.Flip View Iphone

Quiero pasar de una a otra UIViews.

De alguna manera, cuando me alejo de la vista inicial, acabo de obtener la vista volteada, sin animación. Cuando vuelvo, la animación se muestra bien.

Los saltos se activan desde los botones de las vistas.

- (IBAction)showMoreInfo:(id)sender 
{ 
    UIView *moreInfo = self.flipView; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:2.0]; 
    [UIView setAnimationBeginsFromCurrentState:NO]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 

    UIView *parent = self.view.superview; 
    [self.view removeFromSuperview]; 

    [parent addSubview:moreInfo]; 

    [UIView commitAnimations]; 

} 



- (IBAction)showLessInfo:(id)sender 
{ 
    UIView *lessInfo = self.view; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:2.0]; 
    [UIView setAnimationBeginsFromCurrentState:NO]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.flipView cache:YES]; 

    UIView *parent = self.flipView.superview; 
    [self.flipView removeFromSuperview]; 

    [parent addSubview:lessInfo]; 

    [UIView commitAnimations]; 

} 

Respuesta

17

Probablemente sea porque no está utilizando una vista de contenedor como vista de transición. Consulte la documentación sobre setAnimationTransition:forView:cache:

Si desea cambiar la apariencia de una visión durante un ejemplo de transición para, dar la vuelta de una vista a otra, a continuación, utilizar una vista contenedor, una instancia de UIView, de la siguiente manera:

  1. Comience un bloque de animación.
  2. Establezca la transición en la vista de contenedor.
  3. Elimina la subvista de la vista de contenedor.
  4. Agregue la nueva subvista a la vista de contenedor.
  5. Commit el bloque de animación.

Intente utilizar self.view.superview en la vista de transición animación de la showMoreInfo:

La razón showLessInfo: el método funciona es que está utilizando una vista de contenedor.

+0

Querido Jason, cuando hago la auto.view.superview, se ve bien en showMoreInfo :, pero volviendo atrás (usando showLessInfo :) ahora se comporta mal: simplemente muestra la vista inicial sin animación. Poner self.view.superview en este método no ayuda. Estoy seguro de que soy muy estúpido, pero solo dame una línea más de código, y estaría muy agradecido. –

+1

Lo siento por ser estúpido. Puse self.flipView.superview y todo está bien ahora! –

12

¿Se puede usar su ventana principal (UIWindow) como vista de contenedor como UIWindow inherence de UIView?

También iPhone 3.0 introdujo la transacción a través del método del tirón presentModalViewController:

CustomViewController *vc = [[CustomViewController alloc] 
    initWithNibName:@"CustomViewController" bundle:nil]; 

vc.delegate = self; 

// The magic statement. This will flip from right to left. 
// present the modal view controller then when you dismissModalViewController 
// it will transition flip from left to right. Simple and elegant. 
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

[self presentModalViewController:vc animated:YES]; 

[vc release]; 
+0

para eliminar el controlador de vista con este método use: dismissModalViewControllerAnimado – Alex

+0

nice tip :) thax @Sukima –

0

Después de iOS 4.0, puede cambiar entre vistas con esto:

[UIView transitionFromView:sourceView toView:destinationView duration:0.35f options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) { 
    NSLog(@"I just flipped!"); 
}]; 

Como se mencionó Jason, necesitará esto para que ocurra dentro de una vista de contenedor.

Cuestiones relacionadas