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:在外部窗口上镜像子视图的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer / Airplay 按钮

iPad应用程序上的airplay

苹果airplay是什么 苹果手机投屏到电脑

如何判断 AirPlay 是不是在镜像?

JavaScript jQuery:在外部窗口中打开链接

JavaScript 通过Javascript在外部窗口中打开链接