В stackoverflow есть ряд «похожих» вопросов, все из которых я пробовал, но, похоже, никто не ответил, поэтому я пытаюсь задать вопрос по-другому.
проблема: мне нужен предварительный просмотр видео, которое показывает то, что вы видите, если смотрите мимо телефона - независимо от того, как вы поворачиваете телефон - и это кажется удивительно трудным.
Кажется, здесь пять вещей. воспроизвести здесь:
- фактическая ориентация устройства
- ориентация интерфейса и заблокирована ли ориентация
- независимо от ориентации видео, установленной для слоя предварительного просмотра
- передняя или задняя камера
- взаимодействие между swiftui и контроллером uiview
итак ... после прочтения всего стека происходит переполнение - у меня есть uiviewcontroller с previewlayer добавлен в представление viewcontroller. Я добавляю в контроллер представления следующее:
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
override var shouldAutorotate: Bool {
return false;
}
, а затем оборачиваю все это в UIVewControllerRepresentable. Я также создал класс, который следит за акселерометром, поэтому я получаю фактическую ориентацию устройства, включая перевернутую портретную ориентацию на iPhone 11 и игнорируя то, на что привязана ориентация интерфейса. * итак ... ближе всего к работе я могу работать
, если я не устанавливаю ориентацию слоя предварительного просмотра при изменении ориентации устройства
тогда, если устройство ориентация заблокирована на портретную, я получаю именно то, что хочу. Я могу поворачивать телефон сколько угодно, и изображение, которое я вижу, не зависит от поворота.
как только я выключаю блокировку ориентации, когда я поворачиваю телефон, изображение появляется боком.
если я ДЕЙСТВИТЕЛЬНО устанавливаю ориентацию слоя предварительного просмотра при изменении ориентации устройства
когда блокировка ориентации отключена, я получаю то, что хочу, - пока я перевожу устройство правильная ориентация видео, принимая во внимание, нужно ли мне перевернуть его, если это передняя или задняя камера - тогда альбомная левая, альбомная правая и портретная все в порядке, хотя у нее есть своего рода поворот при переходе, что является уродливой ошибкой. могу жить с этим. Однако перевернутый портрет просто не работает.
Однако, конечно, если я включу блокировку ориентации на устройстве, внезапно у меня появится видео сбоку.
Вопрос
так что кажется реальным решением является попытка отделить слой предварительного просмотра от любого намёка на вращение интерфейса - заставить его думать, что интерфейс всегда портретный независимо от любой фактической ориентации или настроек - что я пытался сделать, перегрузив supportedInterfaceOrientations или shouldAutoRotate - но когда я помещаю печать в "viewDidLayoutSubviews" и прошу self.interfaceOrientation.isPortrait - она все еще меняется, когда я повернуть телефон.
КАК сделать так, чтобы уровень предварительного просмотра никогда не участвовал ни в каком повороте? любая помощь будет оценена. Я потратил на это буквально недели.