如何以编程方式精确地找到PPI

时间:2016-04-14 09:29:23

标签: ios swift screen-resolution uiscreen ppi

我试图找出iOS中的PPI(每英寸像素数)。

我找不到任何直接查询方法,就像我们对显示尺寸

那样
UIScreen.mainScreen().bounds

iPhone(163)或iPad(132)的标准通用PPI乘以way to do it,但不准确。

如果公式正确则 iPhone 6 plus的 PPI 为489 ,但实际上 PPI为401 这是{{3 }}

现在似乎硬编码是要走的路。

但我想使用公式以编程方式进行。

3 个答案:

答案 0 :(得分:6)

我刚将一个旧的ObjC库移植并更新为Swift。您可以使用它或获取所需的部分代码。在此处获取:https://github.com/marchv/UIScreenExtension

图书馆使用UIScreen.main.nativeScale将每英寸像素数(PPI)转换为每英寸点数。

使用Cocoapods安装库,然后导入它:

import UIScreenExtension

然后使用它:

if let pointsPerCentimeter = UIScreen.pointsPerCentimeter {
   // code
}

答案 1 :(得分:3)

我认为没有公共API可以获得PPI或屏幕的物理尺寸。

唯一的方法是使用物理尺寸和/或PPI对设备列表进行硬编码(您可以从UIDevice类中获取设备类型)。

顺便说一句。这个问题几乎是同一个问题(不同的方式): How do ruler apps stay accurate on all devices?

答案 2 :(得分:1)

iPhone Plus的比例为3,但nativeScale为2.6。

UIKit对该内容进行采样以适合实际的屏幕尺寸。 金属或OpenGL ES内容应以精确的尺寸渲染。

int screenPPI() {
    return [[UIScreen mainScreen] nativeScale] * ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 132 : 163);
}