Airplay:在外部窗口上镜像子视图
Posted
技术标签:
【中文标题】Airplay:在外部窗口上镜像子视图【英文标题】:Airplay: Mirror subview on external window 【发布时间】:2012-04-08 10:56:08 【问题描述】:关于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,在触摸/用户交互时更新自身,并将这些更新镜像到外部屏幕上。
实现这一目标的正确途径是什么?
感谢阅读! 米
【问题讨论】:
【参考方案1】:名为 AirPlay 镜像的技术名称并不好。它实际上以两种模式运行,一种是将整个 ios 设备镜像到 AirPlay 设备,另一种模式是连接镜像 AirPlay 设备后,开发人员可以使用两个 UIWindow/UIScreen。
您使用的是后一种模式,通常称为“镜像”,但实际上您有一个完全独立的窗口/屏幕要管理,应该有更好的术语来指代这种操作模式。
您在上面描述的操作基本上是将 UIView 从设备窗口移动到 AirPlay 窗口,它的工作方式与它应有的完全一样!
没有技术方法可以让您在这两个窗口上显示 UIView 的单个实例 - 它会存在于一个 UIView 层次结构或另一个层次结构中,但不能同时存在于两者中.换句话说,如果你想在两个屏幕上显示相同的东西,你需要创建同一个 UIView 的两个实例,并将它们分别添加到两个窗口中,然后将它们都更新为他们改变了。
虽然这可能不是您所期望的超级方便的“镜像”,但这可能是一件好事,因为您的 UIView 在设备上的纵横比可能与在 AirPlay 设备上的不同。通过使用两个不同的视图来显示相同的内容,您可以调整 AirPlay 视图的大小,以充分利用设备的可用分辨率。
【讨论】:
谢谢,你是对的。创建两个视图并并行管理它们是唯一的选择。对于任何感兴趣的人,这在 Apple 文档 here 中的“在外部显示器上显示内容”下进行了描述。 从 iOS 7 开始,您应该能够使用快照 API 在另一个屏幕上显示特定的 UIView【参考方案2】:我可以想到几种方法来做到这一点。您是否考虑过为此使用 KVO?本地和外部视图都可以观察驱动其内容的任何模型或控制器。
【讨论】:
以上是关于Airplay:在外部窗口上镜像子视图的主要内容,如果未能解决你的问题,请参考以下文章