3

我必须检查我的设备是否在 iOS 8+ 中改变了方向。

我的做法是:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    let isLand = UIScreen.main.bounds.width > UIScreen.main.bounds.height

    coordinator.animate(alongsideTransition: nil) { _ in
        let isLand2 = UIScreen.main.bounds.width > UIScreen.main.bounds.height


        print("\(isLand) -> \(isLand2)")
    }
}

它在 iPhone 中运行良好,但在 iPadisLand中已经有了新的值,应该是在定向完成之后,所以:

纵向 > 横向:true -> true

横向 > 纵向:false -> false

根据文档,边界应该随着方向而变化,所以它应该有一个之前/之后的边界,不是吗?

UIScreen 主要边界:

此矩形在当前坐标空间中指定,其中考虑了对设备有效的任何界面旋转。因此,当设备在纵向和横向之间旋转时,此属性的值可能会发生变化。

而如果我像这样使用当前根视图控制器的边界,它在 iPhone 和 iPad 上都可以正常工作:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    let isLand = UIApplication.shared.keyWindow!.rootViewController!.view.bounds.width > UIApplication.shared.keyWindow!.rootViewController!.view.bounds.height

    coordinator.animate(alongsideTransition: nil) { _ in
        let isLand2 = UIApplication.shared.keyWindow!.rootViewController!.view.bounds.width > UIApplication.shared.keyWindow!.rootViewController!.view.bounds.height


        print("\(isLand) -> \(isLand2)")
    }
}

纵向 > 横向:false -> true

横向 > 纵向:true -> false

4

1 回答 1

5

您应该尝试改用协调器上下文的 containerView。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    let isLand = coordinator.containerView.bounds.width > coordinator.containerView.bounds.height

    coordinator.animate(alongsideTransition: nil) { _ in
        let isLand2 = coordinator.containerView.bounds.width > coordinator.containerView.bounds.height

        print("\(isLand) -> \(isLand2)")
    }

}

如果您想获得有关转换的更多信息,您可以使用和func view(forKey: UITransitionContextViewKey)键。func viewController(forKey: UITransitionContextViewControllerKey).from

于 2017-03-14T14:17:01.063 回答