swiftui, avcapturevideopreviewlayer и ориентация - PullRequest
0 голосов
/ 14 июля 2020

В 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 - она ​​все еще меняется, когда я повернуть телефон.

КАК сделать так, чтобы уровень предварительного просмотра никогда не участвовал ни в каком повороте? любая помощь будет оценена. Я потратил на это буквально недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...