私は以下について質問があります。私のアプリは主にポートレートモードですが、いくつかのビューコントローラーでは、私はそれを風景モードに回転可能にしたいと考えています。このコードは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")
}
}
を、あなたの答えをありがとうございました。
コード内のどこでもviewWillTransition()をオーバーライドしていますか?自分が望む動作を得るためには、ビューコントローラ階層を使ってこれをオーバーライドする必要があると考えるべきです。 – Sparky
https://developer.apple.com/documentation/uikit/uicontentcontainer/1621466-viewwilltransition – Sparky
システムが移行を管理していて、他のviewcontrollerのコンテキストを介していくつかのコントローラを提示すると、それらは同じように扱われると思います。バックおよびフロントコントローラーでも述べた@Sparkyと同じように、viewWillTransitionメソッドをオーバーライドします。 –