2012-05-22 15 views
5

Ustawiłem dwa kontrolery widoku w mojej Storyboard, każda z przyciskiem akcji. Skonfigurowałem dwa segues:Kierunek obrotu w poziomie w iOS Storyboards

  1. Od pierwszego kontrolera widoku do drugiego kontrolera widoku: Modal, Flip Horizontal.
  2. Od drugiego kontrolera widoku do pierwszego kontrolera widoku: Modal, Flip Horizontal.

Wszystko działa, ale chciałbym, aby było odwrócone w jedną stronę iz powrotem, teraz obraca się w tym samym kierunku dla obu kontrolerów widoku.

Jaki jest najłatwiejszy sposób na odwrócenie efektu klapki?

Odpowiedz

6

Napotkałem ten sam problem i mam nadzieję, że znalazłem rozwiązanie.

Użyłem niestandardowego przejścia, aby odwrócić drogę powrotną. Oto kod mojego 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 

jedynym problemem znalazłem do tego rozwiązania jest to, że metoda viewDidAppear nazywa się natychmiast po uruchomieniu animacji. Podczas normalnej segue nazywa się to po animacji.

+0

To dlatego, że jesteś hamowania hierarchię widok kontrolera. Użyj UIViewcontroller transitionViewController: ... – doozMen

5

Zamiast tworzyć nową prezentację ViewController, sugerowałbym dostęp do właściwości prezentującej ViewController na drugim ViewController, a następnie wywołanie -dismissViewControllerAnimated: completion: on. Tak:

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

To powinna być zaakceptowana odpowiedź ... –

1

Lepiej użyć tego kodu w odpowiedzi NSZombie za:

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