我正在尝试在 iOS 中找出 PPI(每英寸像素数)。
我找不到任何直接的方法来查询这个,就像我们对显示尺寸所做的那样
UIScreen.mainScreen().bounds
有一种方法可以将比例与 iPhone(163) 或 iPad(132) 的标准通用 PPI 相乘,但这并不准确。
如果公式正确,那么iPhone 6 plus 的 PPI 是 489但实际上PPI是 401这是参考
现在看来,硬编码是要走的路。
但我想使用公式以编程方式进行。
我刚刚将我的一个旧 ObjC 库移植并更新到了 Swift。您可以使用它或获取您需要的部分代码。在这里获取:https ://github.com/marchv/UIScreenExtension 。
该库用于UIScreen.main.nativeScale
将每英寸像素 (PPI) 转换为每英寸点数。
使用 Cocoapods 安装库,然后导入它:
import UIScreenExtension
然后利用它:
if let pointsPerCentimeter = UIScreen.pointsPerCentimeter {
// code
}
我相信没有公共 API 可以获取 PPI 或屏幕的物理尺寸。
唯一的方法是使用物理尺寸和/或 PPI 对设备列表进行硬编码(并且您可以从 UIDevice 类中获取设备类型)。
顺便提一句。这是一个几乎问同样问题(不同方式)的问题: 标尺应用程序如何在所有设备上保持准确?
iPhone Plus 有 scale 3,但 nativeScale 是 2.6。
UIKit 对这些内容进行采样以适应实际的屏幕尺寸。Metal 或 OpenGL ES 内容应以精确的尺寸呈现。
int screenPPI() {
return [[UIScreen mainScreen] nativeScale] * ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 132 : 163);
}