有人知道有没有办法在运行时获得设备的屏幕密度(ppi)?如果不需要硬编码不同的密度就好了,以防苹果在将来切换它。
发布于 2011-10-28 05:31:07
我已经找了很长时间了,似乎没有一种简单的方法来获得dpi。然而,UIScreen的文档说一个未缩放的点大约等于1/160英寸。
所以,基本上,如果你想要dpi,你可以将比例乘以160。
float scale = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scale = [[UIScreen mainScreen] scale];
}
float dpi = 160 * scale;
(带有respondsToSelector的if语句是为了让代码在没有该属性的旧版本iOS上工作)
根据维基百科的数据,iPhone是163dpi,带视网膜显示屏的iPhone是326,iPad是132。因此,使用这个公式,iPad的dpi并不是特别准确,尽管iPhone的dpi相当不错。如果您希望已知设备具有更高的准确性,您可以对已知设备的dpi进行硬编码,并使用1/160的比率作为将来任何情况的后备。
float scale = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scale = [[UIScreen mainScreen] scale];
}
float dpi;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
dpi = 132 * scale;
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
dpi = 163 * scale;
} else {
dpi = 160 * scale;
}
这并不是很理想,我自己也不介意看到一个更好的解决方案,但这是我能找到的最好的解决方案。
发布于 2016-09-03 08:18:17
试试https://github.com/lmirosevic/GBDeviceInfo
int ppi = [GBDeviceInfo deviceInfo].displayInfo.pixelsPerInch; // #> 326]
在iOS和OSX上工作
https://stackoverflow.com/questions/3860305
复制相似问题