4

我在使用 AirPlay 时遇到了一些问题。问题是,我正在使用 ATV3 进行开发,而我的电视机支持 1080p。但是当我开始屏幕镜像并接收 UIScreen 的新实例时,边界和 applicationFrame 都给了我 720p 的分辨率。

但是当我实际上将子视图移动到负值时会变得很奇怪,并且整个屏幕都被覆盖了。因此,从技术上讲,我的 iPhone 以 1080p 流式传输,但 UIScreen 返回的边界扫描不足。

我已经尝试overscanCompensation在获取边界或 applicationFrame 之前修改 (尝试了所有 3 个overscanCompensation可用值),但我仍然得到相同的结果。

这是我得到的照片(对不起,这是地球上最糟糕的照片,我知道,但我用手机将图像流式传输到 ATV :))

红色视图是 bounds 属性报告的 720p。 红色视图是 720p 报告的bounds

当我在我的 ATV2 中实际尝试这个时,它变得更加奇怪(即使它支持 1080p,它也应该限制为 720p),结果完全一样

无论如何,如果有人知道获得真实屏幕显示以避免在我的应用程序中放置设置视图的方法,我将非常感激。

提前致谢 :)

4

3 回答 3

2

当您提到您尝试了所有 3overscanCompensation种模式时,我认为您的意思是 3 种记录模式:

typedef enum {
UIScreenOverscanCompensationScale,
UIScreenOverscanCompensationInsetBounds,
UIScreenOverscanCompensationInsetApplicationFrame,
} UIScreenOverscanCompensation;

但是,还有第四种模式,它不存在,但应该可以解决您的问题:只需将您的设置overscanCompensation3.

另外,看看这个SO question

于 2013-03-04T18:06:15.257 回答
2

伊万的回答为我解决了同样的问题!但我在使用 AirPlay Mirroring 时也有边界。通过更改 Apple TV 上的设置,我在没有设置 overscanCompensation 属性的情况下摆脱了边框:尝试将“设置 > 音频和视频 > 调整 AirPlay Overscan”设置为关闭(默认打开)。

于 2013-09-13T18:49:47.937 回答
1

最适合大多数电视的设置是:

externalScreen.overscanCompensation = UIScreenOverscanCompensationInsetBounds | UIScreenOverscanCompensationInsetApplicationFrame; // this is the same as setting it to 3

仅将其设置为 UIScreenOverscanCompensationInsetApplicationFrame 可能会导致 UIWindow 内容未对齐。

3 是 UIScreenOverscanCompensationInsetBounds(1) 和 UIScreenOverscanCompensationInsetApplicationFrame(2) 的位掩码,适用于那些想知道该数字来自何处以及它为什么起作用的人。

于 2013-08-27T17:08:45.263 回答