有人知道在运行时如何获取设备的屏幕密度(ppi)吗?如果能不硬编码不同密度,以防苹果在未来更改,那就太好了...
有人知道在运行时如何获取设备的屏幕密度(ppi)吗?如果能不硬编码不同密度,以防苹果在未来更改,那就太好了...
float scale = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scale = [[UIScreen mainScreen] scale];
}
float dpi = 160 * scale;
(使用respondsToSelector的if语句是为了让代码在旧版本的iOS上正常运行,这些版本没有该属性)
根据维基百科,iPhone的dpi为163,具有视网膜显示器的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;
}
这并不是真正理想的解决方案,我也很愿意看到更好的解决方案,但这是我能找到的最佳方案。
int ppi = [GBDeviceInfo deviceInfo].displayInfo.pixelsPerInch; // #> 326]
适用于iOS和OSX
// 6 Plus @[@7, @1]: @[@(GBDeviceModeliPhone6Plus), @"iPhone 6 Plus", @(GBDeviceDisplay5p5Inch), @401]
。 - ben