Мне нужно проверить, изменилось ли ориентация моего устройства в 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:
Этот прямоугольник указывается в текущем координатном пространстве, которое учитывает любые повороты интерфейса, действующие для устройства. Следовательно, значение этого свойства может измениться при повороте устройства между книжной и альбомной ориентацией.
В то время как он отлично работает как на 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