Nur einen View Controller rotieren Lassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Nur einen View Controller rotieren Lassen

    Hallo,

    ich habe ein Storyboard mit mehreren View Controllern. Aber nur einer von ihnen soll Landscape Mode unterstützen.
    Ich habe, wie in vielen Anleitungen beschrieben, alle Device Orientations aktiviert die ich brauche und dann
    in allen View Controllern, die sich nicht drehen sollen - (BOOL)shouldAutorotate { return NO; } eingefügt.

    Allerdings rotiert das View dann immer noch mit.

    Hat jemand einen Tipp, wie ich Auto Rotation für bestimmte View Controller deaktiviere?

    Bildschirmfoto 2014-09-07 um 11.21.12 1.png
  • Na ja, ob das eine Verschlimmbesserung ist, weiß ich nicht. Es ist einfach anders. Das Defaultverhalten hat sich umgedreht. Anstatt, dass ein ViewController grundsätzlich nur den Portraitmodus unterstützt, unterstützt ein ViewController ab iOS 6 alle in der Info.plist angegebenen Orientierungen. Soll ein ViewController jetzt nur den Portaitmodus unterstützen muss man das für den ViewController einschränken:

    Quellcode

    1. - (NSUInteger)supportedInterfaceOrientations {
    2. return UIInterfaceOrientationMaskPortrait;
    3. }

    Dann muss man noch beachten, dass diese Methode nur für den rootViewController des Fensters aufgerufen wird.
  • Michael schrieb:

    Jede iOS App hat ja genau eine UIWindow Instanz pro Screen. Diese UIWindow Instanz hat eine Property rootViewController. Das ist der ViewController, der nach der Orientierung befragt wird. Außerdem werden auch modal angezeigte ViewController nach der Orientierung befragt.

    Okay, danke.

    Ich habe das ganze jetzt so in der AppDelegate gelöst:

    Quellcode

    1. - (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    2. {
    3. UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
    4. if ([presentedViewController isKindOfClass:[SlideShowViewController class]])
    5. {
    6. return UIInterfaceOrientationMaskAllButUpsideDown;
    7. }else
    8. {
    9. return UIInterfaceOrientationMaskPortrait;
    10. }
    11. }
    Alles anzeigen