2012-05-22 10 views
5

He configurado dos controladores de visualización en mi Storyboard, cada uno con un botón de acción. Configuré dos segues:Dirección de inversión horizontal en iOS Storyboards

  1. Desde el controlador de la primera vista hasta el controlador de la segunda vista: Modal, Volteo horizontal.
  2. Desde el controlador de la segunda vista hasta el controlador de la primera vista: Modal, Voltear horizontalmente.

Todo funciona, pero me gustaría que se voltee hacia un lado y hacia atrás, ahora se voltea en la misma dirección para ambos controladores de visualización.

¿Cuál es la forma más fácil de hacer un efecto de contraluz?

Respuesta

6

Me encontré con el mismo problema, y ​​con suerte encontré una solución.

Utilicé una transición personalizada para dar la vuelta al camino de regreso. Aquí está el código de mi FlipLeftSegue

@implementation FlipLeftSegue 
- (void)perform 
{ 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController;  

    [UIView beginAnimations:@"LeftFlip" context:nil]; 
    [UIView setAnimationDuration:0.8]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:src.view.superview cache:YES]; 
    [UIView commitAnimations]; 

    [src presentViewController:dst animated:NO completion:nil]; 
} 
@end 

El único problema que encontramos a esta solución, es que el método viewDidAppear se llama inmediatamente cuando comienza la animación. Mientras que con la transición normal, se llama después de la animación.

+0

Esto se debe a que está frenando la jerarquía controlador de vista. Use UIViewcontroller transitionViewController: ... – doozMen

5

En lugar de crear una nueva presentación de un ViewController, sugiero acceder a la propiedad para presentar ViewController en el segundo ViewController, y luego llamar a -dismissViewControllerAnimated: completion: en él. De este modo:

-(IBAction)someResponderToYourCancelButtonOrWhatever:(id)sender { 
    // Do some stuff 
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Esta debería ser la respuesta aceptada ... –

1

Es mejor que usar este código en la respuesta de NSZombie:

- (void)swapChildVCFrom:(UIViewController *)from to:(UIViewController *)to options:(enum UIViewAnimationOptions)options 
{ 
    [self addChildViewController:to]; 
    [from willMoveToParentViewController:nil]; 

    // Adjust the new child view controller's view's frame 
    // For example here just set it to fill the parent view 
    to.view.frame = self.view.bounds; 

    [self transitionFromViewController:from 
         toViewController:to 
           duration:1.0 
           options:options 
          animations:nil 
          completion:^(BOOL b) 
          { 
           [to didMoveToParentViewController:self]; 
           [from.view removeFromSuperview]; 
           [from removeFromParentViewController]; 
          }]; 
} 
Cuestiones relacionadas