【问题标题】:Remove underscan/frame on ios external display when using Lightning HDMI Adapter使用 Lightning HDMI 适配器时,移除 ios 外接显示器上的欠扫描/帧
【发布时间】:2014-09-25 13:55:04
【问题描述】:

我已经为此苦苦挣扎了一段时间。

我们可能都知道,对于使用连接显示器作为第二个屏幕的应用程序,Lightning HDMI 适配器不支持 1080p 输出(达到 1080p 的唯一方法是视频流,但很遗憾不是我的情况)。

最大输出分辨率为 1600x900,这在我的情况下可能很好,但我绝对需要摆脱窗口周围的“黑框”,我不知道该怎么做。我能够做到这一点的唯一方法是在电视菜单中手动拉伸电视输出图像,但正如您可能想象的那样,这对于我的最终产品来说不是一个可行的解决方案。

我试过了

secondScreen.overscanCompensation = UIScreenOverscanCompensationInsetApplicationFrame | UIScreenOverscanCompensationInsetBounds;

没有运气:我的问题不是“过扫描”,是“欠扫描”,如果适配器说 1600x900 是最高的,恐怕操作系统无法识别电视的高分辨率。

如果我将 MacBookPro 连接到同一台电视并在显示器设置中强制设置为 1600x900,则整个屏幕会以某种方式正确调整大小以覆盖电视的整个物理区域,但清晰度较低且没有黑框。我想知道在 iOS 生态系统中是否可以设置类似的选项。

我也尝试过使用类似的方法将输出强制为 720p

for (UIScreenMode* mode in secondScreen.availableModes) {
        NSLog(@"%f %f",mode.size.width,mode.size.height);
        if (mode.size.height == 720) {
            secondScreen.currentMode = mode;
        }
    }

因为您无法手动创建 UIScreenMode,但它仍使用 1600x900。而且一切都很难调试,因为闪电适配器没有数据连接(仅充电),所以我根本无法使用 XCODE 调试...

我也尝试过使用 AirPlay 和 VGA 适配器,1080p 的效果很好,但由于各种原因我需要使用 HDMI。不幸的是,iOS8 没有解决这个问题

有没有人可以推荐一个非常好的主意?谢谢大家。

更新 1:

我还发现,当您连接支持 1080p 但没有(例如)HDMI 输入的旧显示器/电视时,VGA 适配器可能会给您带来麻烦(我知道它与 VGA 无关,我只是即使提供 1920x1080 分辨率,也试图解释这台显示器有多旧。这是客户展台上的 SHARP 等离子电视,不知道正确的型号)。

当使用 VGA 适配器连接到 iPad Air 时,输出为 1024x768,并且控制台注销了类似“无法识别屏幕 UUID”的信息。 我也尝试过使用 HDMI 电缆(因为显示器没有 HDMI 输入,我不得不在显示器端使用 HDMI -> DVI 适配器),但我得到的只是通常的 1600x900。

但是,我能够解决问题,但我仍然无法解释为什么会这样: 我将 Lightning-to-HDMI 适配器插入 ipad,然后连接 HDMI-to-VGA 适配器(与 Apple 完全无关),然后使用 VGA 长电缆连接到显示器。 1920x1080 像魅力一样。

这应该是不可能的(我通过 HDMI/闪电适配器以某种方式获得了全高清分辨率,最大只能输出 1600x900),但它确实有效,如果你真的遇到麻烦,试试看我曾是。

另外,请注意,结果会因不同的电视/显示器/屏幕而异。那是完全不可靠的。

【问题讨论】:

    标签: ios hdmi


    【解决方案1】:

    如果您想摆脱欠扫描/边框,那么我建议您按以下代码所示缩放过扫描补偿。我已经使用闪电到 hdmi 电缆对其进行了测试,它在没有边框的外部显示器上运行良好。希望这可以帮助。干杯

    示例代码:

    if UIScreen.screens.count > 1 {
                let secondScreen = UIScreen.screens[1]
                secondScreen.overscanCompensation =  UIScreenOverscanCompensation(rawValue: UIScreenOverscanCompensation.scale.rawValue.advanced(by: 2))! 
                secondWindow = UIWindow(frame: secondScreen.bounds)
                secondWindow?.screen = secondScreen
                secondWindow?.isHidden = false
    }
    

    【讨论】:

    • 或者只是UIScreenOverscanCompensation.none
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多