9

关于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,在触摸/用户交互时更新自身,并将这些更新镜像到外部屏幕上。

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

谢谢阅读!米

4

2 回答 2

15

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

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

您在上面描述的操作基本上是UIView 从设备窗口移动到 AirPlay 窗口,并且它的工作方式完全符合预期!

没有技术方法可以让您在这两个窗口上显示 UIView 的单个实例——它将存在于一个 UIView 层次结构或另一个层次结构中,但不能同时存在于两者中。换句话说,如果你想在两个屏幕上显示相同的东西,你需要创建同一个 UIView 的两个实例,并将它们分别添加到两个窗口中,然后随着它们的变化同时更新它们。

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

于 2012-05-14T00:18:15.627 回答
1

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

于 2012-04-16T08:34:07.907 回答