关于airplay的设计/建筑问题.
我在AppDelegate中设置了外部显示:
我在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 show的单一实例 – 它将存在于一个UIView层次结构中,而不是同时存在.换句话说,如果你想要在两个屏幕上显示相同的东西,你需要创建同一个UIView的两个实例,并将它们分别添加到两个窗口中,然后在它们更改时更新它们.
虽然这可能不是你期待的超级“镜像”,但这可能是一件好事,因为您的UIView可能在设备上具有与AirPlay设备不同的纵横比.通过具有两个不同的视图,显示相同的内容,您可以调整AirPlay视图的大小以最好地利用设备的可用分辨率.