我必须检查我的设备是否在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中工作正常,但是在iPad isLand
中,已经具有新的值,该值应该是在方向完成后的,因此:
肖像>景观:true -> true
风景>肖像:false -> false
根据文档,界限应随着方向而变化,以便它具有在范围之前/之后,不是吗?
Uiscreen主界:
此矩形在当前坐标空间中指定 考虑到该设备有效的任何接口旋转。 因此,该属性的价值可能会在设备时发生变化 在肖像和景观方向之间旋转。
,如果我使用当前的根视图控制器的边界,则它可以很好地工作:
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
您应该尝试使用协调器上下文的coarterview。
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
密钥。