Airplay: зеркальное отображение на внешнем окне

дизайн / архитектурный вопрос по трансляции. Я настроил внешний дисплей в AppDelegate:

<code>UIScreen *externalScreen = UIScreen.screens.lastObject;
self.externalWindow = [[UIWindow alloc] initWithFrame:externalScreenFrame];
self.externalWindow.screen = externalScreen;
self.externalWindow.backgroundColor = [UIColor redColor];
</code>

Работает нормально, телевизор показывает пустой экран красным цветом. Теперь у меня есть ViewController с кучей подпредставлений, и один вид должен быть показан на устройствеand внешний экран. Если я попробую это в ViewController.m:

<code>[_appDelegate.externalWindow addSubview:self.deviceAndTVView];
</code>

deviceAndTVView будет отображаться только на внешнем экране, а не на устройстве. То, что мне нужно, это иметь deviceAndTVView на устройстве, обновляя себя при касаниях / взаимодействии с пользователем, и отражать эти обновления на внешнем экране.

Какой правильный путь для этого?

Спасибо за прочтение! м

Ответы на вопрос(2)

Решение Вопроса

Технология, называемая зеркалированием AirPlay, слабо названа. Он фактически работает в двух режимах, в одном из которых все устройство iOS зеркально отражается на устройстве AirPlay, а в другом режиме, когда после подключения зеркального устройства AirPlay, у разработчика есть два UIWindow / UIScreen для работы.

Вы используете последний режим, который часто называют «зеркальным отображением», но на самом деле у вас есть совершенно отдельное окно / экран для управления, и должна быть лучшая терминология для обозначения этого режима работы.

То, что вы описываете, делая выше, в основномmoving UIView из окна устройства в окно AirPlay, и оно работает точно так, как должно!

Там нет технического способа для вас иметьsingle instance шоу UIView в обоих этих окнах - оно будет существовать в одной иерархии UIView или в другой, но не в обоих одновременно. Другими словами, если вы хотите, чтобы одно и то же отображалось на обоих экранах, вам нужно создатьtwo instances одного и того же UIView, и добавьте их соответственно в два окна, а затем обновите их оба по мере их изменения.

Хотя это может быть не очень удобным "зеркальным отображением" вы ожидали, что это, вероятно, будет хорошей вещью, потому что ваш UIView может иметь другое соотношение сторон на устройстве, чем на устройстве AirPlay. Имея два разных представления, показывающих один и тот же контент, вы можете настроить размер представления AirPlay, чтобы наилучшим образом использовать доступное разрешение устройства.

 marimba05 июн. 2012 г., 16:27
Спасибо вы правы Создание двух видов и параллельное управление ими - единственный вариант. Для тех, кто заинтересован, это описано в документации Applehere в разделе «Отображение содержимого на внешнем дисплее».
 09 мар. 2015 г., 03:07
Начиная с iOS 7 вы должны иметь возможность использовать API моментальных снимков для отображения определенного UIView на другом экране

Я могу придумать пару способов сделать это. Вы смотрели на использование KVO для этого? И локальные, и внешние виды могут наблюдать за тем, какая модель или контроллер управляет их контентом.

Ваш ответ на вопрос