我在使用AirPlay时遇到了一些问题。问题是,我正在使用ATV3进行开发,而我的电视机支持1080p。但是当我开始屏幕镜像并接收新的UIScreen实例时,边界和applicationFrame都给了我720p的分辨率。
但是当我实际将子视图移动到负值时,它变得很奇怪,并且整个屏幕都被覆盖了。所以,从技术上讲,我的iPhone以1080p流式传输,但是UIScreen返回的界限未被扫描。
我已经尝试在获取边界或applicationFrame之前修改overscanCompensation
(同时尝试使用所有3 overscanCompensation
个值)但我仍然得到相同的结果。< / p>
这是我所得到的照片(对不起,这是地球上最糟糕的照片,我知道,但是我正在使用手机将图像传输到ATV :)) / p>
红色视图是
bounds
报告的720p。
当我在ATV2中尝试这个时,它甚至更加奇怪(即使它支持1080p,它应该限制在720p),结果完全相同。
无论如何,如果有人知道获取 真实 屏幕显示的方法以避免在我的应用中放置设置视图,我会非常感激。< / p>
提前致谢:)
答案 0 :(得分:2)
当您提到您尝试了所有3种overscanCompensation
模式时,我认为您的意思是3 记录的模式:
typedef enum {
UIScreenOverscanCompensationScale,
UIScreenOverscanCompensationInsetBounds,
UIScreenOverscanCompensationInsetApplicationFrame,
} UIScreenOverscanCompensation;
但是,第四种模式不存在,但应该解决您的问题:只需将overscanCompensation
设置为3
。
另外,请看一下这个SO question。
答案 1 :(得分:2)
伊万的回答为我解决了同样的问题!但是在使用AirPlay Mirroring时我也有边框。我通过更改Apple TV上的设置而没有设置overscanCompensation属性来摆脱边框:尝试设置'设置&gt;音频&amp;视频&gt;将AirPlay Overscan'调整为Off(默认开启)。
答案 2 :(得分:1)
最适合大多数电视的设置是:
externalScreen.overscanCompensation = UIScreenOverscanCompensationInsetBounds | UIScreenOverscanCompensationInsetApplicationFrame; // this is the same as setting it to 3
将其设置为UIScreenOverscanCompensationInsetApplicationFrame会导致UIWindow内容错位。
3是UIScreenOverscanCompensationInsetBounds(1)和UIScreenOverscanCompensationInsetApplicationFrame(2)的位掩码,用于那些想知道该数字来自何处及其工作原理的人。