2014-07-24 12 views
5

Ich habe eine benutzerdefinierte UIViewControllerAnimationTransition Klasse bereits erstellt, und müssen dies animieren ein UITabBarController, wenn es Tabs schaltet.Transition Delegate für UITabBarController Animation

Die tabBarController verwendet jedoch nicht die normale Tab-Leiste. Ich habe eine benutzerdefinierte Implementierung, wie es wirkt, und wenn eine Taste gedrückt wird, ruft es diesen Code:

tabBarController.selectedIndex = index 

Zur Zeit habe ich die tabBarController (Unterklasse) als Delegierten für die eigenen transitionDelegate. Die Delegate-Methode animationControllerForPresentedController wird jedoch nie tatsächlich aufgerufen.

Ist es für den Tab-Bar-Controller in Ordnung, sein eigener Delegierter zu sein? Wenn ja, warum wird der Übergangscode nie wirklich aufgerufen?

+0

gibt es eine wirklich gute Lösung hier, dass es [enter Link Beschreibung hier] [1] [1] erklärt: http://stackoverflow.com/a/5180104/2855836 – SleepsOnNewspapers

Antwort

11

animationControllerForPresentedController ist der falsche Ansatz für den Tab-Leiste-Controller.

In der UITabBarController-Unterklasse das Protokoll UITabBarControllerDelegate übernehmen und als eigenes delegate festlegen. Verwenden Sie dann tabBarController: animationControllerForTransitionFromViewController: toViewController:, um das benutzerdefinierte Objekt UIViewControllerAnimatedTransitioning zurückzugeben.

Um eine bessere Visualisierung zu erhalten, sehen Sie sich VCTransitionsLibrary im TabBarDemo-Ordner an.

+0

Sollte es nicht 'UIViewControllerTransitionDelegate' anstelle von' UITabBarControllerDelegate' sein? –

+0

Nein, ich meine, sollte es nicht 'delegate' sein, statt' transitionDelegate'! Mein Fehler. –

+0

@ AndréFratelli glaube nicht. Der Delegat und der Transitionsdelegierte machen verschiedene Dinge. Der Delegat behandelt Ereignisse, wenn eine Schaltfläche gedrückt wird, während der Übergangsdelegat Animationen verarbeitet. – erdekhayser

0

Haben Sie diese Delegate-Methoden wie folgt verwendet?

@interface BTSlideInteractor : NSObject <UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate> 

- (IBAction)showModalButtonWasTouched:(id)sender 
{ 
    BTSlideInteractor *interactor = [[BTSlideInteractor alloc] init]; 
    interactor.presenting = YES; 

    BTModalViewController *modalController = [self.storyboard instantiateViewControllerWithIdentifier:@"ModalViewController"]; 
    modalController.modalPresentationStyle = UIModalPresentationCustom; 
    modalController.transitioningDelegate = interactor; 
    [self presentViewController:modalController animated:YES completion:nil]; 
} 

Verwenden Sie diesen Link für Referenz: https://github.com/brightec/CustomViewControllerTransition/blob/master/test/BTViewController.m

Wenn Sie die Lösung finden didnt freundlich Ihre Codes hinzufügen.

+0

Sind Sie sagen, dass der Trabition Delegat für die * View-Controller * nicht die Tab-Leiste gesetzt sein sollte? – erdekhayser