2012-10-01 21 views
5

La mia app ha sottoclassi di controller di visualizzazione shouldautorotateToInterfaceOrientation. E in esso, decido la rotazione di ogni vista. Funziona correttamente Ma in iOS6, sebbene legga i documenti forniti da Apple, non riesco a capirlo.Non riesco a capire il meccanismo di rotazione in iOS6

La mia app ha il controller di navigazione come controller di visualizzazione radice. Questo controller di navigazione ha un controller di tabulazione. E il controller scheda ha alcuni controller di vista. Voglio che il primo controller di visualizzazione (in controller di schede) venga visualizzato solo come modalità verticale e il secondo controller di visualizzazione (in controller scheda) sia in modalità verticale che orizzontale. Funziona correttamente in iOS5. Ma non so come farlo su iOS6. Anche se so che dovrei sottoclasse supportatoInterfaceOrientations, non funziona quando avviene la rotazione. Con mia sorpresa si chiama quando una vista sta mostrando. Come fare ciò che voglio?

Grazie per la lettura.

+0

si dovrebbe definire l'orientamento supportato per l'applicazione in '-l'applicazione: supportedInterfaceOrientationsForWindow:' del file 'AppDelegate.m' o nel' Info.plist' e la tua le viste rispondono solo al metodo '-shouldAutorotate:' con un valore 'BOOL', se la tua vista supporta gli orientamenti predefiniti o meno. il '- shouldAutorotateToInterfaceOrientation:' è obsoleto in iOS6. – holex

+0

Grazie mille. L'ho risolto. – eon

risposta

8

Il seguente link potrebbe si sterzare nella direzione giusta: http://code.shabz.co/post/32051014482/ios-6-supportedorientations-with-uinavigationcontroller

In sostanza, è necessario creare una sottoclasse UINavigationController e farlo ascoltare ai cambiamenti nella -supportedInterfaceOrientations della sua topViewController. Esiste una classe di esempio che è possibile scaricare nel post del blog e spiega anche quale codice aggiungere.

+1

Grazie. L'ho risolto. – eon

0

Quando si utilizza UINavigationController o UITabbarViewController - l'applicazione fa sempre quello che dicono nei metodi shouldAutorotate, supportInterfaceOrientations.

È possibile aggiungere una categoria per reindirizzare questi metodi al controller attualmente visualizzato. Ti piace questa:

@implementation UINavigationController (Rotation_IOS6) 
-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; 
} 
@end 

simile per UITabbarViewController.

+0

Ciò potrebbe avere effetti collaterali indesiderati. Pensaci se lo fai, allora questo è il comportamento di TUTTI i controller di navigazione a livello di sistema, anche se sono presentati dal sistema operativo. Ho avuto un incidente a causa di quello. La sottoclasse è migliore perché si mantiene il controllo di chi ottiene il comportamento speciale e chi no. – n13

Problemi correlati