横向 View Controller App Delegate

Landscape orientation View Controller App Delegate

我正在尝试仅将一个视图控制器置于横向模式,将其他视图控制器置于纵向模式。

首先,我尝试使每个 View Controller 的旋转无效,除了我想要的那个(shouldAutoRotate false,只有 Portrait,...),但是我有一个 Navigation Controller,它重叠带有状态栏的导航栏,我无法解决它。所以在那之后,我尝试清理我所做的一切,并仅从 AppDelegate 启用或禁用方向。

这是我找到并尝试过的代码:

    func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {

        if self.window?.rootViewController?.presentedViewController is SecondViewController {

            let secondController = self.window!.rootViewController!.presentedViewController as! SecondViewController

            if secondController.isPresented {
                return Int(UIInterfaceOrientationMask.All.rawValue);
            } else {
                return Int(UIInterfaceOrientationMask.Portrait.rawValue);
            }
        } else {
            return Int(UIInterfaceOrientationMask.Portrait.rawValue);
        }

    }

但是这段代码永远不会出现在第一个 if 中(即使 View controller 是 SecondViewController)。

那么知道如何检查我是否处于可以指定方向的特定 VC 中吗?

提前致谢!

检查此递归方法以获取当前 viewController

func getCurrentViewController(viewController:UIViewController?)-> UIViewController?{

    if let tabBarController = viewController as? UITabBarController{

        return getCurrentViewController(tabBarController.selectedViewController)
    }

    if let navigationController = viewController as? UINavigationController{
        return getCurrentViewController(navigationController.visibleViewController)
    }

    if let viewController = viewController?.presentedViewController {

        return getCurrentViewController(viewController)

    }else{

        return viewController
    }
}

并在支持的方向方法上使用它,如下所示

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {

    if let currentVC = getCurrentViewController(self.window?.rootViewController) as? SecondViewController{

            return Int(UIInterfaceOrientationMask.All.rawValue)

    }
    return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}