2014-07-24 15 views
5

Ho già creato una classe personalizzata UIViewControllerAnimationTransition e ho bisogno di fare questa animazione a UITabBarController quando cambia scheda.Delegata transizione per animazione UITabBarController

Il tabBarController non utilizza la barra delle schede normale, però. Ho un'implementazione personalizzata che si comporta come, e quando viene premuto un pulsante, che chiama questo codice:

tabBarController.selectedIndex = index 

Attualmente ho il tabBarController (sottoclasse) come delegato per la propria transitionDelegate. Tuttavia, il metodo delegato animationControllerForPresentedController non viene mai chiamato.

Va bene che il controller della barra delle schede sia il proprio delegato? In tal caso, perché il codice di transizione non è mai stato effettivamente chiamato?

+0

c'è una soluzione molto buona qui che lo spiega [entra Descrizione Link qui] [1] [1]: http://stackoverflow.com/a/5180104/2855836 – SleepsOnNewspapers

risposta

11

animationControllerForPresentedController è l'approccio errato per il controller della barra delle linguette.

Nella sottoclasse UITabBarController, adottare il protocollo UITabBarControllerDelegate e impostarlo come proprio delegate. Quindi, utilizzare tabBarController: animationControllerForTransitionFromViewController: toViewController: per restituire l'oggetto personalizzato UIViewControllerAnimatedTransitioning.

Per ottenere una visualizzazione migliore, guardare VCTransitionsLibrary nella cartella TabBarDemo.

+0

Non dovrebbe essere 'UIViewControllerTransitionDelegate' invece di' UITabBarControllerDelegate'? –

+0

No, voglio dire, non dovrebbe essere 'delegate', invece di' transitionDelegate'! Colpa mia. –

+0

@ AndréFratelli non la penso così. Il delegato e il delegato alla transizione fanno cose diverse. Il delegato gestisce eventi come quando viene premuto un pulsante, mentre il delegato di transizione gestisce le animazioni. – erdekhayser

0

Hai utilizzato questi metodi di delega in questo modo?

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

Utilizza questo link per Riferimento: https://github.com/brightec/CustomViewControllerTransition/blob/master/test/BTViewController.m

se non ha ancora trovato la soluzione gentilmente aggiungere i codici.

+0

Are stai dicendo che il delegato delle trabsition dovrebbe essere impostato per i * controller di vista * e non per la barra delle schede? – erdekhayser

Problemi correlati