Airplay:外部窗口上的镜像子视图
关于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,在触摸/用户交互时更新自己,并在外部屏幕上镜像这些更新。
这是实现这一目标的正确途径?
谢谢阅读! 米
名为AirPlay镜像的技术名称很差。 它实际上以两种模式运行,一种是整个iOS设备镜像到AirPlay设备,另一种模式是连接镜像AirPlay设备,开发人员可以使用两种UIWindow / UIScreen。
您使用的是后一种模式,通常称为“镜像”,但实际上您需要一个完全独立的窗口/屏幕来管理,并且应该有更好的术语来引用这种操作模式。
你在上面描述的内容基本上是将 UIView从设备窗口移动到AirPlay窗口,它的工作正常!
没有技术方法可以让你在这两个窗口上都有一个UIView节目的实例 – 它将存在于一个UIView层次结构中,或者存在于另一个UIView层次结构中,但不能同时存在。 换句话说,如果您希望在两个屏幕上显示相同的内容,则需要创建相同UIView的两个实例 ,并将它们分别添加到两个窗口,然后在它们更改时更新它们。
虽然这可能不是你期望的超级“镜像”,但它可能是一件好事,因为你的UIView在设备上的宽高比可能与在AirPlay设备上的宽高比不同。 通过显示相同内容的两个不同视图,您可以调整AirPlay视图的大小以充分利用设备的可用分辨率。
我可以想到几种方法。 您是否考虑过使用KVO? 本地和外部视图都可以观察到驱动其内容的任何模型或控制器。
- iCloud不使用专用configuration文件进行同步
- 如何检查一个字符是否在一个特定的Unicode范围之间?
- 您准备好使用iOS 12了吗?
- AppStore提交:ERROR ITMS-9000:“无效的包结构 – 不允许二进制文件’MyApp.app/BuildAgent’
- 如何使用iOS应用程序对Active Directory进行身份validation
- NSFetchedResultsController并获得分组的权利
- Chromecast可以在默认接收器上投射.m3u8直播videostream吗?
- 将GIF文件添加到Xcode资产文件夹
- swift removedPercentEncoding不适用于gb2312string