Фон
У меня есть приложение, которое использует AVFoundation для того, чтобы иметь собственную камеру. Это происходит в OCRViewController
. Когда я делаю снимок, я отправляю снятый снимок в другой вид ImagePreviewViewController
.
Я использую Xcode 10.2.1 (10E1001)
с Swift 5
Цель
Чего я хотел бы добиться, так это зафиксировать ориентацию ImagePreviewViewController
относительно исходной ориентации изображения. Я уже знаю, как получить ориентацию изображения, но не могу заблокировать ориентацию вида.
Я получаю поворот изображения следующим образом: let imageOri = capturedImage?.imageOrientation
Что я пробовал?
Я попробовал принятые ответы в нескольких других источниках:
Как заблокировать ориентацию только для одного контроллера вида?
Как привязать ориентацию одного контроллера вида к портретному режиму только в Swift
https://www.hackingwithswift.com/example-code/uikit/how-to-lock-a-view-controllers-orientation-using-supportedinterfaceorientations
Чтение документации по https://developer.apple.com/documentation/uikit/uiviewcontroller#//apple_ref/occ/instm/UIViewController/supportedInterfaceOrientations в Обработка вращения вида указано следующее:
Я также попробовал множество предложенных решений при написании этого запроса, однако большинство, похоже, использует следующий подход (или его вариант), и он не работает для меня.
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}
override func shouldAutorotate() -> Bool{
return false
}
override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
return UIInterfaceOrientation.Portrait
}
Начиная с iOS 8, все методы, связанные с ротацией, устарели. Вместо этого повороты обрабатываются как изменение размера представления контроллера представления и поэтому сообщаются с использованием метода viewWillTransition (to: with :).
Однако я не уверен, как продвигаться дальше.
Интересные фрагменты кода
Следующий метод в моем OCRViewController
, здесь я создаю экземпляр ImagePreviewViewController
и прикрепляю захваченное изображение.
func displayCapturedPhoto(capturedPhoto : UIImage) {
let imagePreviewViewController = storyboard?.instantiateViewController(withIdentifier: "ImagePreviewViewController") as! ImagePreviewViewController
imagePreviewViewController.capturedImage = capturedPhoto
navigationController?.pushViewController(imagePreviewViewController, animated: true)
}
Используя приведенную ниже функцию переопределения внутри моего ImagePreviewViewController
, я могу определить ориентацию контроллера вида.
override func viewDidAppear(_ animated: Bool) {
if UIDevice.current.orientation.isLandscape {
print("Landscape")
} else {
print("Portrait")
}
}