我正在寻找“关于本机”显示的值(在我的13英寸MBP上为2560 x 1600)。我尝试了CGDisplayBounds和NSScreen.main,它们都不返回这些值,而是返回使用的值内部用于渲染/测量。
根据Kens的建议:
let modes = CGDisplayCopyAllDisplayModes(CGMainDisplayID(), [kCGDisplayShowDuplicateLowResolutionModes: kCFBooleanTrue] as CFDictionary) as! [CGDisplayMode]
for mode in modes {
let flags = String(format:"%02X", mode.ioFlags)
print("\(mode.pixelWidth)x\(mode.pixelHeight) \(mode.width)x\(mode.height) 0x\(flags)")
}
输出为:
2560x1600 2560x1600 0x2000003 <- This would be the correct one
...
2880x1800 2880x1800 0x03 <- This one is the biggest 1x mode
...
因此,使用最大的1x会得到错误的结果。我将ioFlags添加到输出中。我相信这可能是缺少的链接;-)
谢谢Ken!
答案 0 :(得分:1)
我认为最好的方法是枚举所有显示模式(包括1x模式)并找到a)一种ioFlags
包含kDisplayModeNativeFlag
的显示模式,或者,如果没有该标记,则b)最大的1x模式尺寸。
您将使用CGDisplayCopyAllDisplayModes()
并传递一个字典,将键kCGDisplayShowDuplicateLowResolutionModes
映射到kCFBooleanTrue
作为options
,以获取所有模式。您可以测试CGDisplayModeGetPixelWidth()
等于CGDisplayModeGetWidth()
以确定哪个是1x。
答案 1 :(得分:0)
NSScreen
具有backingScaleFactor
属性来检查比例