Так как мое приложение получило поддержку любой ориентации.Я хотел бы заблокировать только альбомный режим для определенного UIViewController.
Я использовал это https://stackoverflow.com/a/41811798/10150796
, он отлично работает для любой ориентации и заблокировать только портретный режим для конкретного UIViewController
Но когда я использую это для блокировки альбомный режим из сквозного портретного обзора, моя рамка обзора не обновляется до ландшафта.
Вот мой код ViewController
override func viewWillAppear(_ animated: Bool) {
AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.landscapeLeft, andRotateTo: UIInterfaceOrientation.landscapeLeft)
}
override func viewWillDisappear(_ animated: Bool) {
AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.all)
}
Делегат приложения
struct AppUtility {
static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
if let delegate = UIApplication.shared.delegate as? AppDelegate {
delegate.orientationLock = orientation
}
}
/// OPTIONAL Added method to adjust lock and rotate to the desired orientation
static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
self.lockOrientation(orientation)
UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
}
}
Вывод Впервые с любой ориентации все работает нормально:
Выходные данные Во второй раз в портретной ориентации это выглядит так: (
И если то же самое во второй раз из альбомной ориентации, то это нормально
Я пытался решить эту проблему за последние 2 дня, но не нашел, что не так, я также попытался с обновлением рамки просмотра вручную иэтот кадр обновляется, но событие щелчкакроме размера портретной рамки не работает: (
Может кто-нибудь сказать мне, где я не прав?Заранее спасибо