2017-09-21 6 views
1

다음과 같은 질문이 있습니다. 내 응용 프로그램은 주로 세로 모드이지만 일부보기 제어기의 경우 가로 모드로 회전 할 수있게하려고합니다. 이 코드는 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") 
    } 
} 

이 답변 주셔서 감사합니다.

+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 –