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

mar*_*mba 9 external mirroring uiview ios airplay

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

UIScreen *externalScreen = UIScreen.screens.lastObject;
self.externalWindow = [[UIWindow alloc] initWithFrame:externalScreenFrame];
self.externalWindow.screen = externalScreen;
self.externalWindow.backgroundColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)

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

[_appDelegate.externalWindow addSubview:self.deviceAndTVView];
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢阅读!米

Rob*_*uss 15

名为AirPlay镜像的技术名称很差.它实际上工作在两种模式,一种其中整个iOS设备镜像到AirPlay的设备,并且在一次镜像AirPlay的装置连接另一模式中,显影剂有两个的UIWindow/UIScreen的一起工作.

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

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

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

虽然这可能不是超convienent"镜像"你期待,这可能是一件好事,因为你的UIView可能有比它的AirPlay的设备上的设备在不同的纵横比.通过显示相同内容的两个不同视图,您可以调整AirPlay视图的大小以充分利用设备的可用分辨率.