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.
Ü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
https://developer.apple.com/documentation/uikit/uicontentcontainer/1621466-viewwilltransition – Sparky
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. –