다음과 같은 질문이 있습니다. 내 응용 프로그램은 주로 세로 모드이지만 일부보기 제어기의 경우 가로 모드로 회전 할 수있게하려고합니다. 이 코드는 topviewcontroller에서 완벽하게 작동합니다. 회전 가능하게 만들고 싶지만 이미지 팝업 뷰 컨트롤러이므로 뒤쪽의 컨트롤러도 회전 할 수 있습니다. 그리고 나는 그것을 원하지 않는다. 난 그냥 팝업 viewcontroller 회전 가능하게하고 싶습니다. topviewcontroller 만 회전하도록하려면 어떻게해야합니까?맨위로 ViewController 만 회전 시키십시오
는 이미 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
}
그리고 내 viewcontrollers에서
파일 : 사전에@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 메서드를 재정의합니다. –