Airplay:外部窗口上的镜像子视图

关于airplay的设计/建筑问题。 我在AppDelegate中设置了一个外部显示器:

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

工作正常,电视显示红色的空白屏幕。 现在我有一个带有一堆子视图的ViewController,并且应该在设备外部屏幕上显示一个视图。 如果我在ViewController.m中尝试这个:

 [_appDelegate.externalWindow addSubview:self.deviceAndTVView]; 

deviceAndTVView将仅显示在外部屏幕上,而不再显示在设备上。 我需要的是在设备上安装deviceAndTVView,在触摸/用户交互时更新自己,并在外部屏幕上镜像这些更新。

这是实现这一目标的正确途径?

谢谢阅读! 米

名为AirPlay镜像的技术名称很差。 它实际上以两种模式运行,一种是整个iOS设备镜像到AirPlay设备,另一种模式是连接镜像AirPlay设备,开发人员可以使用两种UIWindow / UIScreen。

您使用的是后一种模式,通常称为“镜像”,但实际上您需要一个完全独立的窗口/屏幕来管理,并且应该有更好的术语来引用这种操作模式。

你在上面描述的内容基本上是 UIView从设备窗口移动到AirPlay窗口,它的工作正常!

没有技术方法可以让你在这两个窗口上都有一个UIView节目的实例 – 它将存在于一个UIView层次结构中,或者存在于另一个UIView层次结构中,但不能同时存在。 换句话说,如果您希望在两个屏幕上显示相同的内容,则需要创建相同UIView的两个实例 ,并将它们分别添加到两个窗口,然后在它们更改时更新它们。

虽然这可能不是你期望的超级“镜像”,但它可能是一件好事,因为你的UIView在设备上的宽高比可能与在AirPlay设备上的宽高比不同。 通过显示相同内容的两个不同视图,您可以调整AirPlay视图的大小以充分利用设备的可用分辨率。

我可以想到几种方法。 您是否考虑过使用KVO? 本地和外部视图都可以观察到驱动其内容的任何模型或控制器。