2012-04-08 74 views
9

关于airplay的设计/建筑问题。 我已经安装在AppDelegate中的外部显示:Airplay:外部窗口的镜子视图

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,通过触摸/用户交互进行更新,并在外部屏幕上对这些更新进行镜像。

哪一条是正确的?

感谢您的阅读! m

回答

14

这项名为AirPlay镜像的技术名字很差。它实际上以两种模式运行,一种是整个iOS设备镜像到AirPlay设备,另一种是连接镜像AirPlay设备的另一种模式,开发人员有两个UIWindow/UIScreen可以使用。

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

你上面描述的做法基本上是移动一个UIView从设备窗口到AirPlay窗口,它的工作原理与它应该完全一样!

有你有关于这两个窗口的一个UIView秀单个实例没有技术的方式 - 它会在一个UIView的层次或其他,但不能同时存在,在同一时间。换句话说,如果您希望在两个屏幕上都显示相同的内容,则需要创建同一UIView的两个实例,并将它们分别添加到两个窗口中,然后在更改它们时更新它们。

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

+0

谢谢,你说得对。创建两个视图并且并行管理是唯一的选择。对于任何感兴趣的人,这在苹果文档[这里]中描述(http://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingWindows/CreatingWindows.html#//apple_ref/doc/uid/ “在外部显示器上显示内容”下的TP40009503-CH4-SW9)。 – marimba 2012-06-05 14:27:23

+0

从iOS 7开始,您应该可以使用快照API在其他屏幕上显示特定的UIView – jjxtra 2015-03-09 02:07:35

1

我可以考虑几种方法来做到这一点。你看过使用KVO吗?本地和外部视图都可以观察到任何模型或控制器正在驱动其内容。