2017-09-21 2 views
1

私は以下について質問があります。私のアプリは主にポートレートモードですが、いくつかのビューコントローラーでは、私はそれを風景モードに回転可能にしたいと考えています。このコードはtopviewcontrollerのために完璧に機能しますが、回転可能にしたいのですが、画像ポップアップviewcontrollerの一種であるため、背面のコントローラも回転していることがわかります。私はそれを望んでいません。ポップアップviewcontrollerを回転可能にしたいだけです。 topviewcontrollerだけが回転するように私は何ができますか?トップViewControllerだけを作る

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 
} 

そして、私のviewcontrollers内のファイル:

私はすでにAppDelegateに次のコード持って事前に

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

を、あなたの答えをありがとうございました。

+0

コード内のどこでもviewWillTransition()をオーバーライドしていますか?自分が望む動作を得るためには、ビューコントローラ階層を使ってこれをオーバーライドする必要があると考えるべきです。 – Sparky

+0

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

+0

システムが移行を管理していて、他のviewcontrollerのコンテキストを介していくつかのコントローラを提示すると、それらは同じように扱われると思います。バックおよびフロントコントローラーでも述べた@Sparkyと同じように、viewWillTransitionメソッドをオーバーライドします。 –

答えて

1

まずターゲットの設定 - >一般タブ - >展開情報セクションに移動し、デバイスの向きを変えて、ポートレート、風景の左側と右側の風景を選択します。今すぐあなたのviewcontrollerのポップアップの下でのあなたのケースについては、

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

同様にVCのいずれかが回転するのを制限することができます。

+0

申し訳ありません。以前のビューコントローラはまだ回転しています。クラックするハードナット、インターネット上でそれのための解決策を見つけていない。 –

+0

私はそれを実装しようとします、ちょっとです。 –

+0

答えに役立つこのコードについては、多分いくつかあります:controller.modalPresentationStyle = UIModalPresentationStyle.overFullScreenこれは、以前のVCからのSeque Initiation –

関連する問題