MZa*_*kow 20 iphone objective-c
任何人都知道是否有办法在运行时获得设备的屏幕密度(ppi)?如果苹果在未来将其切换,那么不必硬编码不同的密度是很好的...
max*_*max 23
我一直在寻找它太长时间了,似乎没有一个简单的方法来获得dpi.但是,UIScreen的文档说,未缩放的点大约相当于1/160英寸.
所以,基本上如果你想要dpi,你可以将比例乘以160.
float scale = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scale = [[UIScreen mainScreen] scale];
}
float dpi = 160 * scale;
Run Code Online (Sandbox Code Playgroud)
(带有respondsToSelector的if语句是为了使代码适用于没有该属性的旧版iOS)
根据维基百科的说法,iPhone是163 dpi,带有视网膜显示屏的iPhone是326,iPad是132.所以使用这个公式,iPad的dpi并不是特别准确,尽管iPhone非常好.如果您希望已知设备具有更高的准确度,则可以对已知设备的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;
}
Run Code Online (Sandbox Code Playgroud)
这不是很理想,我不介意自己找到更好的解决方案,但这是我能找到的最好的解决方案.
| 归档时间: |
|
| 查看次数: |
15832 次 |
| 最近记录: |