2012-05-22 1 views
5

Nella mia storyboard sono stati configurati due controller di visualizzazione, ciascuno con un pulsante di azione. Ho impostato due follower:Direzione di inversione orizzontale negli storyboard iOS

  1. Dal primo controller di vista al secondo controller di vista: Modale, Rifletti orizzontale.
  2. Dal secondo controller della vista al primo controller della vista: Modale, Capovolgi orizzontalmente.

Tutto funziona, ma mi piacerebbe che capovolga in un modo e viceversa, ora gira nella stessa direzione per entrambi i controller di vista.

Qual è il modo più semplice per ottenere un effetto flip-flip back?

risposta

6

Ho riscontrato lo stesso problema e, si spera, ho trovato una soluzione.

Ho usato una sequenza personalizzata per tornare indietro. Ecco il codice della mia 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 

L'unico problema che ho trovato per questa soluzione, è che il metodo viewDidAppear viene chiamato immediatamente quando l'animazione si avvia. Mentre con il seguito normale, viene chiamato dopo l'animazione.

+0

Questo perché si sta frenando la gerarchia di vista del regolatore. Usa UIViewcontroller transitionViewController: ... – doozMen

5

Invece di creare una nuova presentazione di un ViewController, suggerirei di accedere alla proprietà per presentareViewController sul secondo ViewController e quindi chiamare -dismissViewControllerAnimated: completion: su di esso. In questo modo:

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

Questa dovrebbe essere la risposta accettata ... –

1

È meglio utilizzare questo codice in risposta di 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]; 
          }]; 
}