2012-10-01 2 views
5

Meine App hat View-Controller Unterklassen shouldautorotateToInterfaceOrientation. Und darin entscheide ich die Rotation jeder Ansicht. Dies funktioniert korrekt. Aber in iOS6, obwohl ich Dokumente Apple zur Verfügung gestellt habe, kann ich es nicht verstehen.Ich kann Rotationsmechanismus in iOS6 nicht verstehen

Meine App hat Navigation Controller als Root-View-Controller. Dieser Navigationscontroller verfügt über einen Tab-Controller. Und der Tab-Controller hat einige View-Controller. Ich möchte, dass der erste View-Controller (im Tab-Controller) nur als Hochformat und der zweite View-Controller (im Tab-Controller) als Hoch- und Querformat angezeigt wird. Es funktioniert korrekt in iOS5. Aber ich weiß nicht, wie man es in iOS6 macht. Obwohl ich weiß, ich sollte supportedInterfaceOrientations Unterklasse, es funktioniert nicht, wenn die Rotation passieren. Zu meiner Überraschung wird es aufgerufen, wenn eine Ansicht angezeigt wird. Wie mache ich was ich will?

Vielen Dank für das Lesen.

+0

sollten Sie die unterstützte Orientierung für Ihre Anwendung in '-Anwendung definieren: supportedInterfaceOrientationsForWindow:' 'die AppDelegate.m' Datei oder im' Info.plist' und Ihre Sichten würden nur die Methode '-shouldAutorotate:' mit einem 'BOOL'-Wert beantworten, wenn Ihre Ansicht die vordefinierten Ausrichtungen unterstützt oder nicht. Die '- shouldAutorotateToInterfaceOrientation:' ist in iOS6 veraltet. – holex

+0

Danke holex. Ich habe es gelöst. – eon

Antwort

8

Über den folgenden Link können Sie in die richtige Richtung lenken: http://code.shabz.co/post/32051014482/ios-6-supportedorientations-with-uinavigationcontroller

Grundsätzlich müssen Sie UINavigationController Unterklasse und haben es in -supportedInterfaceOrientations seiner topViewController auf Veränderungen hören. Es gibt eine Beispielklasse, die Sie im Blogpost herunterladen können. Außerdem wird erläutert, welcher Code hinzugefügt werden soll.

+1

Danke. Ich habe es gelöst. – eon

0

Wenn Sie UINavigationController oder UITabbarViewController - Anwendung immer das tut, was sie in ihrem shouldAutorotate sagen, supportedInterfaceOrientations Methoden.

Sie können eine Kategorie hinzufügen, um diese Methoden auf den aktuell angezeigten Controller umzuleiten. So:

@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 

Ähnliche für UITabbarViewController.

+0

Dies kann unbeabsichtigte Nebenwirkungen haben. Denken Sie darüber nach, wenn Sie das tun, dann ist das das Verhalten ALLER Navigationssteuerungen systemweit, selbst wenn sie vom Betriebssystem präsentiert werden. Ich bin deswegen abgestürzt. Subclassing ist besser, weil Sie die Kontrolle darüber behalten, wer das spezielle Verhalten erhält und wer nicht. – n13