2017-09-21 4 views
1

Ich habe eine Frage zu den folgenden. Meine App ist hauptsächlich im Hochformat, aber für einige Viewcontroller möchte ich sie in den Querformatmodus drehen. Der Code funktioniert perfekt für den Topviewcontroller, den ich drehen möchte, aber da es sich um eine Art Bild-Popup-Viewcontroller handelt, kann man auch den Controller in der Rückseite ebenfalls rotieren sehen. Und das will ich nicht. Ich möchte nur den Popup-Viewcontroller drehbar machen. Was kann ich tun, damit nur der topviewcontroller rotiert?Machen Sie nur oben ViewController drehen

Ich habe bereits den folgenden Code in AppDelegate:

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
    if let rootViewController = self.topViewControllerWithRootViewController(rootViewController: window?.rootViewController) { 
     if (rootViewController.responds(to: Selector(("canRotate")))) { 

      return .allButUpsideDown; 
     } 
    } 

    return .portrait; 
} 

private func topViewControllerWithRootViewController(rootViewController: UIViewController!) -> UIViewController? { 
    if (rootViewController == nil) { return nil } 
    if (rootViewController.isKind(of: UITabBarController.self)) { 
     return topViewControllerWithRootViewController(rootViewController: (rootViewController as! UITabBarController).selectedViewController) 
    } else if (rootViewController.isKind(of: UINavigationController.self)) { 
     return topViewControllerWithRootViewController(rootViewController: (rootViewController as! UINavigationController).visibleViewController) 
    } else if (rootViewController.presentedViewController != nil) { 
     return topViewControllerWithRootViewController(rootViewController: rootViewController.presentedViewController) 
    } 
    return rootViewController 
} 

Und in meinem Viewcontrollers-Datei:

@IBAction func didDismissButtonPress(sender: UIButton) { 
    self.dismiss(animated: true) {() -> Void in 
     UIDevice.current.setValue(Int(UIInterfaceOrientation.portrait.rawValue), forKey: "orientation") 
    } 
} 

Im Voraus vielen Dank für Ihre Antwort.

+0

Überschreiben Sie ViewWillTransition() irgendwo in Ihrem Code? Ich denke, Sie müssen dies durch Ihre View-Controller-Hierarchie überschreiben, um das gewünschte Verhalten zu erhalten. – Sparky

+0

https://developer.apple.com/documentation/uikit/uicontentcontainer/1621466-viewwilltransition – Sparky

+0

Ich denke, wenn das System den Übergang verwaltet und wenn Sie einige Controller über den Kontext des anderen Viewcontrollers präsentieren, werden sie gleich behandelt. Überschreibe die viewWillTransition-Methode, wie auch @Sparky im Back- und Front-Controller erwähnt. –

Antwort

1

Gehen Sie zunächst zu Zieleinstellung -> Registerkarte Allgemein -> Deployment Info, wählen Sie in der Geräteausrichtung Hochformat, Querformat links und Querformat rechts. Jetzt für Ihren Fall in Erweiterung Ihres Viewcontroller unter pop,

extension BelowVC { 
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    return UIInterfaceOrientationMask.portrait 
    } 
} 

Ebenso können Sie dreht einen der VCs beschränken.

+0

Sorry funktioniert nicht. Der vorherige Viewcontroller rotiert noch immer. Harte Nuss zu knacken, habe keine Lösung dafür im Internet gefunden. –

+0

Ich werde es versuchen, nur einen Moment zu implementieren. –

+0

Vielleicht haben Sie etwas über diesen Code, um mit der Antwort zu helfen: controller.modalPresentationStyle = UIModalPresentationStyle.overFullScreen Dies ist in der Sequence Initiation von der vorherigen VC –

Verwandte Themen