我试图找出iOS中的PPI(每英寸像素数)。
我找不到任何直接查询方法,就像我们对显示尺寸
那样UIScreen.mainScreen().bounds
iPhone(163)或iPad(132)的标准通用PPI乘以way to do it,但不准确。
如果公式正确则 iPhone 6 plus的 PPI 为489 ,但实际上 PPI为401 这是{{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);
}