2016-04-07 22 views
0

ViewControllerA präsentiert ViewControllerB modal.iOS - Geräteausrichtung erzwingen, wenn View Controller modal präsentiert wird

ViewControllerA sollte Hochformatausrichtung sein.

ViewControllerB sollte LandscapeRight-Ausrichtung sein.

ich tun: ViewControllerA:

override func shouldAutorotate() -> Bool { 
     return false 
    } 
    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     return UIInterfaceOrientationMask.Portrait 
    } 
    override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation { 
     return UIInterfaceOrientation.Portrait 
    } 

ViewControllerB

override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation { 
     return UIInterfaceOrientation.LandscapeRight 
    } 

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     return UIInterfaceOrientationMask.LandscapeRight 
    } 

Es Arbeiten, aber wenn ich ViewControllerB schließen, ViewControllerA wird auch LandscapeRight. Wie es zu beheben? Thx.

SOLUTION:

bearbeiten AppDelegete Datei.

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 

     if self.window?.rootViewController?.presentedViewController is ViewControllerB { 

      let secondController = self.window!.rootViewController!.presentedViewController as! ViewControllerB 

      if secondController.isPresented { 
       return UIInterfaceOrientationMask.LandscapeRight; 
      } else { 
       return UIInterfaceOrientationMask.Portrait; 
      } 
     } else { 
      return UIInterfaceOrientationMask.Portrait; 
     } 
    } 
+0

Ihre Lösung richtig ist, aber es wird wirklich kompliziert, wenn Sie mehr Viewcontrollers in verschiedenen Orientierungen haben. Sie können meine Lösung versuchen, es funktioniert in meinem Szenario. – KlimczakM

Antwort

1

Sie müssen in ViewControllerA Autorotation ermöglichen, da es zurück zu Portrait-Modus nach ViewControllerB Entlassung gehen muss. Es wird später nicht automatisch gedreht, da Sie auf diesem Bildschirm nur die Ausrichtung "Hochformat" zulassen.

Die Lösung lautet:

override func shouldAutorotate() -> Bool { 
    return true 
} 
+0

es funktioniert nicht für mich – phnmnn

+0

@phnmnn Verwenden Sie "UINavigationController" dazwischen? Oder es ist nur 'UIViewController'? – KlimczakM

+0

UINavigationController – phnmnn