Воспроизведение AVKit полноэкранных видео в альбомной ориентации в iOS 12 выпуске - PullRequest
0 голосов
/ 16 октября 2018

Когда необходимо настроить полноэкранный режим AVPlayer для поддержки альбомной ориентации в приложении только для портретов, наиболее распространенной рекомендацией является добавление AVFullScreenViewController в качестве исключения и включение поддержки альбомной ориентации.Например, добавьте сравнение для этого имени класса в метод supportedInterfaceOrientations(for:) в вашем AppDelegate.

Однако, он никогда не работал для меня (хотя я проверял это только в iOS 11), и мне пришлось добавить такойисключение для моего UIViewController подкласса, который содержит видео в качестве подпредставления.(И в моем случае сделать обходной путь, чтобы этот контроллер представления поддерживал только портретный режим, когда видео не в полноэкранном режиме, а также ориентацию портрета и ландшафта, когда видео в полноэкранном режиме.)

Удивительнодостаточно, это не работает в iOS 12. Небольшое исследование обнаружило, что Apple изменила механизм полноэкранного представления в AVKit внутренне.(Заметный знак избегать использования внутренних API.)

Предыдущая версия иерархии представлений основана на экземпляре UIWindow, который содержит UITransitionView, и параллельно вы просматриваете иерархию.UITransitionView содержит этот AVFullScreenViewController экземпляр.( снимок экрана iOS11 )

Иерархия представлений версии iOS 12 выглядит совсем иначе: на этот раз два окна.Первый знакомый UIWindow, который содержит вашу иерархию представлений.Второй для меня новый - экземпляр AVWindow, который содержит UITransitionView с AVFullScreenViewController внутри и неопределенным подклассом UIViewController в качестве родного брата.( скриншот iOS12 )

Когда я пытаюсь повернуть экран, supportedInterfaceOrientations метод вызывается как для AVFullScreenViewController, так и для этого неизвестного UIViewController подкласса.(Точнее, я не могу быть уверен, что именно для этого подкласса UIViewController вызывается supportedInterfaceOrientations, но, скорее всего, так и есть.)

Итак, кто-нибудь еще сталкивался с этой проблемой?Есть ли решение или обходной путь?

Спасибо за ваше участие заранее *

PS Прошу прощения за закрашивание внутренних имен классов, эти скриншоты взяты из проекта моей компании.

PPS На данный момент я поддержал все ориентации окна в моем AppDelegate и переопределил supportedInterfaceOrientations в каждом подклассе контроллера представления для поддержки только портретного.

1 Ответ

0 голосов
/ 17 июля 2019

После долгих экспериментов этот обходной путь как-то работает для меня.1004 *

...