2016-05-11 12 views
2

Ich habe eine ViewController können sagen ViewControllerA und ein ViewController lässt sagen ViewControllerB.Mit dem UIViewControllerTransitionCoordinator animateAlongsideTransition-Methode

ViewControllerB wird modal von ViewControllerA mit einem benutzerdefinierten Übergang dargestellt.

In ViewControllerA:

-(void)buttonClicked... 
{ 
    ViewControllerB * controller = [[ViewControllerB alloc] init]; 
    [controller setModalPresentationStyle:UIModalPresentationCustom]; 
    controller.transitioningDelegate = self; 
    [self presentViewController:controller animated:YES completion:nil]; 
} 

In ViewControllerA -

#pragma mark - UIViewControllerTransitioningDelegate 

- 

(id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented 
                     presentingController:(UIViewController *)presenting 
                      sourceController:(UIViewController *)source 
{ 

    FadeInWithPopAnimator* fadeInAnimator = [[FadeInWithPopAnimator alloc] init]; 
    return fadeInAnimator; 
} 

Ich habe eine benutzerdefinierte Animator-Klasse namens FadeInWithPopAnimator, die die transitionDuration und animationTransition Methoden implementiert.

Ich möchte ein paar Ansichten auf dem vorgestellten Viewcontroller - ViewControllerB, 0,2 Sekunden nach dem Beginn der Übergangsanimation animieren.

Ich habe die Dokumente online gelesen und es sieht aus wie mit einem TransitionCoordinator ist der Weg zu gehen. Aber wo sollte ich den Code setzen?

1) Beim Aufruf des presentViewController in ViewControllerA?

2) In der Animator-Klasse?

3) In viewWillAppear von ViewControllerA?

Ich habe ein paar Dinge ausprobiert, aber es gibt mir keine Ergebnisse und Beispiele sind schwer zu finden.

Antwort

2

TransitionCoordinator auf dem dargestellten View-Controller wird gesetzt, nachdem die Animation eines View-Controllers gestartet wurde, also in viewWillAppear des dargestellten View-Controllers. Fügen Sie zusätzliche Animationen hinzu, indem Sie animateAlongsideTransition:completion: für den Übergangskoordinator verwenden. In Ihrem Fall in ViewControllerB:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear]; 

    [self.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 

     // change any properties on your views 

    } completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 


    }]; 
}