Pregunta

considere el siguiente código y dígame qué estoy haciendo mal.

Quiero cambiar entre dos UIViews.

De alguna manera, cuando me alejo de la vista inicial, solo obtengo la vista invertida, sin animación. Cuando volteo, la animación se muestra muy bien.

Los cambios se activan desde los botones en las vistas mismas.

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

}
¿Fue útil?

Solución

Probablemente se deba a que no está utilizando una vista de contenedor como vista de transición. Consulte la documentación en setAnimationTransition: forView: caché:

  

Si desea cambiar la apariencia de una vista durante una transición & # 8212; por ejemplo, cambie de una vista a otra & # 8212; luego use una vista de contenedor, una instancia de UIView, de la siguiente manera :

     
      
  1. Comienza un bloque de animación.
  2.   
  3. Establezca la transición en la vista de contenedor.
  4.   
  5. Eliminar la subvista de la vista de contenedor.
  6.   
  7. Agregue la nueva subvista a la vista del contenedor.
  8.   
  9. Confirma el bloque de animación.
  10.   

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

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

Otros consejos

¿Puede usar su MainWindow (UIWindow) como la vista de contenedor como la inherencia UIWindow de UIView?

También el iPhone 3.0 introdujo la transacción de volteo a través del método 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];

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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top