ppi 各代iphone_iOS设备型号以及PPI大全

全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们构建一套成体系的图形学知识架构,你在我们这里获得的不止于那些毫无意义的代码,我们这里更多的是代码背后的故事,以及精准、透彻的理解。我们不会扔给人们一本书或者给个思路让人们去自学,我们是亲自来设计出好的资源,让人们明白到底背后还有哪些细节。

这里插播一个引擎大赛的消息,感兴趣的同学可以看一眼,这也是东汉书院的立项使命:疯狂的程序员:自研引擎大赛​zhuanlan.zhihu.com

大赛官方主页东汉书院-自己动手写游戏引擎​edu.battlefire.cn

参赛选手作品

目前还只有一个参赛选手,明年打算送出去总共3个VIP名额,参加即可获奖~疯狂的程序员:参赛作品2-Colble离线室内渲染器和Juziimo实时外观渲染器​zhuanlan.zhihu.com

简介

我们既然是做引擎内核的,那么必然要为逻辑层那些写脚本的同学准备好可靠的设备信息,供他们查询。所以今天就简单的来介绍一下iOS设备上如何查询当前设备的PPI和设备型号吧。

iOS设备型号不是通过API查询得到的,比如不会有一个API能告诉你,你的代码现在在iPhone8还是iphone9上运行。你需要自己去跟据文档和设备的identifier去推算出它是个啥。

那这个东西有啥用呢?

你知道设备型号后,就可以知道它的PPI了。

那你为啥要知道PPI呢?

这就是重点了,可以低阶程序员压根不想管PPI这档子事,但是做为引擎内核程序员,你必须要处理好你的程序跨不同PPI的设备后,表现尽可能的足够优秀,所以获取设备的PPI就是非常有必要的了。

直接上代码,首先是获取设备的machine这个属性,里面就是设备的标识了:

utsname xxx;

uname(&xxx);

const char * identifier=xxx.machine;

然后判断这个设备是啥么

#define IsCStrEqual(str1,str2) (strcmp(str1,str2)==0)+(const char*)iPhoneDeviceIdentifierToType:(const char *)identifier{

if(IsCStrEqual(identifier, "iPhone13,4")){

return "iPhone 12 Pro Max";

}

if(IsCStrEqual(identifier, "iPhone13,3")){

return "iPhone 12 Pro";

}

if(IsCStrEqual(identifier, "iPhone13,2")){

return "iPhone 12";

}

if(IsCStrEqual(identifier, "iPhone13,1")){

return "iPhone 12 mini";

}

if(IsCStrEqual(identifier, "iPhone12,8")){

return "iPhone SE 2";

}

if(IsCStrEqual(identifier, "iPhone12,5")){

return "iPhone 11 Pro Max";

}

if(IsCStrEqual(identifier, "iPhone12,3")){

return "iPhone 11 Pro";

}

if(IsCStrEqual(identifier, "iPhone12,1")){

return "iPhone 11";

}

if(IsCStrEqual(identifier, "iPhone11,6")||IsCStrEqual(identifier, "iPhone11,4")){

return "iPhone XS Max";

}

if(IsCStrEqual(identifier, "iPhone11,2")){

return "iPhone XS";

}

if(IsCStrEqual(identifier, "iPhone11,8")){

return "iPhone XR";

}

if(IsCStrEqual(identifier, "iPhone10,3")||IsCStrEqual(identifier, "iPhone10,6")){

return "iPhone X";

}

if(IsCStrEqual(identifier, "iPhone10,2")||IsCStrEqual(identifier, "iPhone10,5")){

return "iPhone 8 Plus";

}

if(IsCStrEqual(identifier, "iPhone10,1")||IsCStrEqual(identifier, "iPhone10,4")){

return "iPhone 8";

}

if(IsCStrEqual(identifier, "iPhone9,2")||IsCStrEqual(identifier, "iPhone9,4")){

return "iPhone 7 Plus";

}

if(IsCStrEqual(identifier, "iPhone9,1")||IsCStrEqual(identifier, "iPhone9,3")){

return "iPhone 7";

}

if(IsCStrEqual(identifier, "iPhone8,4")){

return "iPhone SE";

}

if(IsCStrEqual(identifier, "iPhone8,2")){

return "iPhone 6s Plus";

}

if(IsCStrEqual(identifier, "iPhone8,1")){

return "iPhone 6s";

}

if(IsCStrEqual(identifier, "iPhone7,2")){

return "iPhone 6";

}

if(IsCStrEqual(identifier, "iPhone7,1")){

return "iPhone 6 Plus";

}

if(IsCStrEqual(identifier, "iPhone6,1")||IsCStrEqual(identifier, "iPhone6,2")){

return "iPhone 5s";

}

if(IsCStrEqual(identifier, "iPhone5,3")||IsCStrEqual(identifier, "iPhone5,4")){

return "iPhone 5c";

}

if(IsCStrEqual(identifier, "iPhone5,1")||IsCStrEqual(identifier, "iPhone5,2")){

return "iPhone 5";

}

if(IsCStrEqual(identifier, "iPhone4,1")){

return "iPhone 4S";

}

if(IsCStrEqual(identifier, "iPhone3,1")||IsCStrEqual(identifier, "iPhone3,2")||IsCStrEqual(identifier, "iPhone3,3")){

return "iPhone 4";

}

if(IsCStrEqual(identifier, "iPhone2,1")){

return "iPhone 3GS";

}

if(IsCStrEqual(identifier, "iPhone1,2")){

return "iPhone 3G";

}

if(IsCStrEqual(identifier, "iPhone1,1")){

return "iPhone";

}

if(IsCStrEqual(identifier, "iPod9,1")){

return "iPod Touch 7";

}

if(IsCStrEqual(identifier, "iPod7,1")){

return "iPod Touch 6";

}

if(IsCStrEqual(identifier, "iPod5,1")){

return "iPod Touch 5";

}

if(IsCStrEqual(identifier, "iPod4,1")){

return "iPod Touch 4";

}

if(IsCStrEqual(identifier, "iPod3,1")){

return "iPod Touch 3";

}

if(IsCStrEqual(identifier, "iPod2,1")){

return "iPod Touch 2";

}

if(IsCStrEqual(identifier, "iPod1,1")){

return "iPod Touch";

}

return "iPhone Unkown";

}

+(const char*)iPadDeviceIdentifierToType:(const char*)identifier{

if(IsCStrEqual(identifier, "iPad11,1")||IsCStrEqual(identifier, "iPad11,2")){

return "iPad Mini 5";

}

if(IsCStrEqual(identifier, "iPad5,1")||IsCStrEqual(identifier, "iPad5,2")){

return "iPad Mini 4";

}

if(IsCStrEqual(identifier, "iPad4,7")||IsCStrEqual(identifier, "iPad4,8")||IsCStrEqual(identifier, "iPad4,9")){

return "iPad Mini 3";

}

if(IsCStrEqual(identifier, "iPad4,4")||IsCStrEqual(identifier, "iPad4,5")||IsCStrEqual(identifier, "iPad4,6")){

return "iPad Mini 2";

}

if(IsCStrEqual(identifier, "iPad2,5")||IsCStrEqual(identifier, "iPad2,6")||IsCStrEqual(identifier, "iPad2,7")){

return "iPad Mini";

}

if(IsCStrEqual(identifier, "iPad8,11")||IsCStrEqual(identifier, "iPad8,12")){

return "iPad Pro 12.9-inch 4";

}

if(IsCStrEqual(identifier, "iPad8,9")||IsCStrEqual(identifier, "iPad8,10")){

return "iPad Pro 11-inch 2";

}

if(IsCStrEqual(identifier, "iPad8,5")||IsCStrEqual(identifier, "iPad8,6")||IsCStrEqual(identifier, "iPad8,7")||IsCStrEqual(identifier, "iPad8,8")){

return "iPad Pro 12.9-inch 3";

}

if(IsCStrEqual(identifier, "iPad8,1")||IsCStrEqual(identifier, "iPad8,2")||IsCStrEqual(identifier, "iPad8,3")||IsCStrEqual(identifier, "iPad8,4")){

return "iPad Pro 11-inch";

}

if(IsCStrEqual(identifier, "iPad7,3")||IsCStrEqual(identifier, "iPad7,4")){

return "iPad Pro 10.5-inch";

}

if(IsCStrEqual(identifier, "iPad7,1")||IsCStrEqual(identifier, "iPad7,2")){

return "iPad Pro 12.9-inch 2";

}

if(IsCStrEqual(identifier, "iPad6,3")||IsCStrEqual(identifier, "iPad6,4")){

return "iPad Pro 9.7-inch";

}

if(IsCStrEqual(identifier, "iPad6,7")||IsCStrEqual(identifier, "iPad6,8")){

return "iPad Pro 12.9-inch";

}

if(IsCStrEqual(identifier, "iPad13,1")||IsCStrEqual(identifier, "iPad13,2")){

return "iPad Air 4";

}

if(IsCStrEqual(identifier, "iPad11,3")||IsCStrEqual(identifier, "iPad11,4")){

return "iPad Air 3";

}

if(IsCStrEqual(identifier, "iPad5,3")||IsCStrEqual(identifier, "iPad5,4")){

return "iPad Air 2";

}

if(IsCStrEqual(identifier, "iPad4,1")||IsCStrEqual(identifier, "iPad4,2")||IsCStrEqual(identifier, "iPad4,3")){

return "iPad Air";

}

if(IsCStrEqual(identifier, "iPad11,6")||IsCStrEqual(identifier, "iPad11,7")){

return "iPad 8";

}

if(IsCStrEqual(identifier, "iPad7,11")||IsCStrEqual(identifier, "iPad7,12")){

return "iPad 7";

}

if(IsCStrEqual(identifier, "iPad7,5")||IsCStrEqual(identifier, "iPad7,6")){

return "iPad 6";

}

if(IsCStrEqual(identifier, "iPad6,11")||IsCStrEqual(identifier, "iPad6,12")){

return "iPad 5";

}

if(IsCStrEqual(identifier, "iPad3,4")||IsCStrEqual(identifier, "iPad3,5")||IsCStrEqual(identifier, "iPad3,6")){

return "iPad 4";

}

if(IsCStrEqual(identifier, "iPad3,1")||IsCStrEqual(identifier, "iPad3,2")||IsCStrEqual(identifier, "iPad3,3")){

return "iPad 3";

}

if(IsCStrEqual(identifier, "iPad2,1")||IsCStrEqual(identifier, "iPad2,2")||IsCStrEqual(identifier, "iPad2,3")||IsCStrEqual(identifier, "iPad2,4")){

return "iPad 2";

}

if(IsCStrEqual(identifier, "iPad1,1")){

return "iPad";

}

return "iPad Unkown";

}

+(const char *)DeviceIdentifierToDeviceType:(const char *)identifier{

if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone){

return [Utils iPhoneDeviceIdentifierToType:identifier];

}else if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){

return [Utils iPadDeviceIdentifierToType:identifier];

}

return "Unkown";

}

然后我们就可以通过它到底是什么设备,再去百度它的详细参数了,比如分辨率,比如PPI。最终我们添加了这么一个方法,通过设备名获取PPI:

+(float)DeviceTypeToDevicePPI:(const char*)device_type{

if(IsCStrEqual(device_type, "iPhone 6 Plus")||IsCStrEqual(device_type, "iPhone 7 Plus")||IsCStrEqual(device_type, "iPhone 8 Plus")||IsCStrEqual(device_type, "iPhone 6s Plus")){

return 401.0f;

}

if(IsCStrEqual(device_type, "iPhone 12 mini")){

return 476.0f;

}

if(IsCStrEqual(device_type, "iPhone 12")||IsCStrEqual(device_type, "iPhone 12 Pro")){

return 460.0f;

}

if(IsCStrEqual(device_type, "iPhone 12 Pro Max")||IsCStrEqual(device_type, "iPhone 11 Pro Max")

||IsCStrEqual(device_type, "iPhone 11 Pro")||IsCStrEqual(device_type, "iPhone XS Max")||IsCStrEqual(device_type, "iPhone XS")

||IsCStrEqual(device_type, "iPhone X")){

return 458.0f;

}

if(IsCStrEqual(device_type, "iPhone 4s")||IsCStrEqual(device_type, "iPhone 4")||IsCStrEqual(device_type, "iPod Touch 4")){

return 330.0f;

}

if(IsCStrEqual(device_type, "iPhone SE 2")||IsCStrEqual(device_type, "iPhone SE")||IsCStrEqual(device_type, "iPhone 11")||IsCStrEqual(device_type, "iPhone XR")

||IsCStrEqual(device_type, "iPhone 6")||IsCStrEqual(device_type, "iPhone 7")||IsCStrEqual(device_type, "iPhone 8")||IsCStrEqual(device_type, "iPhone 6s")

||IsCStrEqual(device_type, "iPhone 5")||IsCStrEqual(device_type, "iPhone 5c")||IsCStrEqual(device_type, "iPhone 5s")||IsCStrEqual(device_type, "iPod Touch 5")

||IsCStrEqual(device_type, "iPod Touch 6")||IsCStrEqual(device_type, "iPod Touch 7")||IsCStrEqual(device_type, "iPad Mini")||IsCStrEqual(device_type, "iPad Mini 2")

||IsCStrEqual(device_type, "iPad Mini 3")||IsCStrEqual(device_type, "iPad Mini 4")||IsCStrEqual(device_type, "iPad Mini 5")){

return 326.0f;

}

if(IsCStrEqual(device_type, "iPad Pro 12.9-inch 4")||IsCStrEqual(device_type, "iPad Pro 12.9-inch 3")||IsCStrEqual(device_type, "iPad Pro 12.9-inch 2")

||IsCStrEqual(device_type, "iPad Pro 12.9-inch")||IsCStrEqual(device_type, "iPad Pro 11-inch 2")||IsCStrEqual(device_type, "iPad Pro 11-inch")

||IsCStrEqual(device_type, "iPad Pro 10.5-inch")||IsCStrEqual(device_type, "iPad Pro 9.7-inch")

||IsCStrEqual(device_type, "iPad Air 4")||IsCStrEqual(device_type, "iPad Air 3")

||IsCStrEqual(device_type, "iPad Air 2")||IsCStrEqual(device_type, "iPad Air")

||IsCStrEqual(device_type, "iPad 8")||IsCStrEqual(device_type, "iPad 7")||IsCStrEqual(device_type, "iPad 6")

||IsCStrEqual(device_type, "iPad 5")||IsCStrEqual(device_type, "iPad 4")||IsCStrEqual(device_type, "iPad 3")){

return 264.0f;

}

if(IsCStrEqual(device_type, "iPhone 3GS")||IsCStrEqual(device_type, "iPhone 3G")||IsCStrEqual(device_type, "iPhone")||IsCStrEqual(device_type, "iPod Touch")

||IsCStrEqual(device_type, "iPod Touch 2")||IsCStrEqual(device_type, "iPod Touch 3")){

return 163.0f;

}

if(IsCStrEqual(device_type, "iPad 2")||IsCStrEqual(device_type, "iPad")){

return 132.0f;

}

return 326.0f;

}

完结撒花。

以后要是苹果发布新设备了,再来更新这些代码,同志们直接复制过去就可以用了。

至于怎么使用PPI,怎么降分辨率渲染,怎么适配你的字体,请参考引擎课程中的讲解。

参考链接iOS Quick Reference for iPhone, iPad, and Apple Watch​iosres.comModels - The iPhone Wiki​www.theiphonewiki.com

我们核心关注和讨论的领域是引擎的底层技术以及商业化方面的信息,可能并不适合初级入门的同学。另外官方维护两个公众号,第一个公众号是关于我们企业自身产品的信息与动态的公众号,如果对我们自身信息与动态感兴趣的同学,可以关注图形之心。

除此之外,我们为了更频繁的发布一些咨询与文章,我们维护的第二个公众号是“内核观察”,内核观察提供的主要是一些与我们无关的咨询与文章。

只言片语,无法描绘出整套图形学领域的方方面面,只有成体系的知识结构,才能够充分理解和掌握一门科学,这是艺术。我们已经为你准备好各式各样的内容了,东汉书院,等你来玩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值