Использование UIScenes в iOS 13, как мне AirPlay Mirror экран (кажется, по умолчанию для внешнего дисплея) - PullRequest
0 голосов
/ 24 октября 2019

Если я скомпилирую на устройстве iOS 12 (не использую UIScene) и AirPlay Mirror на моем Apple TV, приложение будет зеркально отражено на телевизоре.

На устройстве iOS 13 оно, похоже,относитесь к нему как к внешнему дисплею, где он отформатирован по размеру экрана (но у меня нет возможности управлять им).

Я бы предпочел старую функциональность - просто отразить его.

Как сделатьВыполнить зеркалирование на iOS 13? Я копаюсь в документах для:

application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration

А в UISceneConfiguration есть свойство role (у него есть UISceneSession.Role.windowExternalDisplay, когда я пытаюсь AirPlay Mirror), но это не кажетсяиметь любое значение, например UISceneSession.Role.windowMirror.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Я играл с зеркальным отображением и внешними дисплеями, и существуют различные возможности только с правильной комбинацией кода / настроек, но определенная функциональность кажется невозможной.

Под iOS 13 (со встроенным приложениемс помощью базового SDK для iOS 13) вы можете отобразить свое приложение на внешнем дисплее. Но выполнение этой работы не позволяет вашему приложению отображать различный контент на внешнем дисплее. По сути, ваше приложение только отражает или отображает только уникальную сцену для внешнего дисплея.

Если вы хотите, чтобы ваше приложение отображалось только на зеркале, убедитесь, что:

  1. Удалитеapplication(_:configurationForConnecting:options:) от вашего делегата приложения.
  2. Убедитесь, что в Info.plist нет записи для «Роли сеанса внешнего дисплея» в разделе «Конфигурация сцены» «Манифеста сцены приложения».

Если ни одна из этих двух вещей не является частью вашего приложения, то ваше приложение просто отобразит любой внешний экран, когда вы активируете Screen Mirroring на устройстве iOS.

0 голосов
/ 24 октября 2019

Вместо реализации метода конфигурации сцены AppDelegate в iOS 13:

@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    let configuration = UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    configuration.delegateClass = SceneDelegate.self
    return configuration
}

Я вместо этого переключился на использование варианта Info.plist (и удалил приведенный выше код), где вы фактически указываете все вышеперечисленное в своемInfo.plist вместо. (Для получения актуальной версии того, что ожидается в файле Info.plist, просто создайте новый проект в Xcode и скопируйте содержимое из нового файла Info.plist для клавиши Application Scene Manifest).

Itтеперь отлично работает и AirPlay Mirror зеркала как положено. Я попытался изменить role на windowApplication, как iOS, похоже, делает с вариантом Info.plist, но он все еще не работает.

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