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

这里插播一个引擎大赛的消息,感兴趣的同学可以看一眼,这也是东汉书院的立项使命:疯狂的程序员:自研引擎大赛​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

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

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

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

ppi 各代iphone_iOS设备型号以及PPI大全相关推荐

  1. ppi 各代iphone_这样的iphone12,好看还中用,必须买!

    原标题:这样的iphone12,好看还中用,必须买! 关于iphone12的爆料,已经大致把iphone12的模样印刻在了每一个关注iphone12的人,每一个期待iphone12会带来不一样的使用体 ...

  2. ios开发之--所有设备的屏幕尺寸(最新) -设备型号对比- Replaykit录屏分辨率

    所有设备型号官网地址:https://www.theiphonewiki.com/wiki/Models iPhone: 机型 逻辑分辨率(point) Scale 物理分辨率(pixel) 比例 像 ...

  3. iOS开发-获取设备型号信息

    开发中有的时候查看设计统计数据,或者通过日志查看错误信息,这个时候我们就需要获取获取设备信息,看下关于设备有几种方法: 1 2 3 4 5 NSLog(@"%@",[[UIDevi ...

  4. 如何判断iphone设备型号和ios系统版本号

    判断IOS设备类型一般会使用 //设备名称 return [UIDevice currentDevice].name;//设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevi ...

  5. iOS 获取当前设备型号iPhone7/iPhone7P

    #include <sys/types.h> #include <sys/sysctl.h> //获得设备型号 + (NSString *)getCurrentDeviceMo ...

  6. 【代码笔记】iOS-获得设备型号

    一,代码. - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.NSL ...

  7. iOS SDK具体解释之UIDevice(系统版本号,设备型号...)

    原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 blog.csdn.net/column/details/huangwenchen ...

  8. adb查看手机设备型号、品牌、机型等信息

    adb查看手机设备型号.品牌.机型等信息 以下操作均基于ADB模式. 1.查看机型时,可以使用以下命令: adb shell getprop ro.product.model 2.如果我们忘记具体系统 ...

  9. 华为交换机查看设备型号

    华为交换机查看设备型号用 display elabel 命令进行查看 <huayun_1G>display elabel Warning: It may take a long time ...

  10. Unity 之 代码获取IOS设备型号 -- 做分辨率适配

    Unity 之 代码获取IOS设备型号 一,通过机器型号校验 1.1 逻辑解释 1.2 实现代码 二,通过长宽比校验 一,通过机器型号校验 1.1 逻辑解释 在https://www.theiphon ...

最新文章

  1. 分享:Gunicorn 0.17 发布,Python HTTP 服务器
  2. redis中的zset
  3. nodeJs实现文件上传,下载,删除
  4. 为Qt Designer创建自定义Widgets小部件
  5. Elasticsearch之配置详解
  6. 深度学习(17)TensorFlow高阶操作六: 高阶OP
  7. java基础57 css样式、选择器和css定位(网页知识)
  8. 吴恩达神经网络和深度学习-学习笔记-23-快速搭建你的第一个系统原型,然后迭代
  9. 二十四、Java集合框架(一)
  10. linux 编译java文件 执行class文件
  11. 人人商城小程序昵称变成了“微信用户”头像也不显示?getUserInfo换成getUserProfile
  12. 新手初步--Springmvc
  13. Unity3d 周分享(22期 2019.8.30 )
  14. chrome浏览器提示“adobe flash player不是最新版本!”
  15. 软件测试常问面试题,你真的会搭建测试环境吗?
  16. Android 新浪微博开放平台应用 android签名怎么获得
  17. “五子登科”新解之“票子,房子,车子,妻子,孩子”
  18. PaaS服务从heroku迁移到Fly.io小计
  19. 计算机校招自我介绍,银行校招面试自我介绍范文
  20. linux里面查找替换命令,Linux常用命令(一)————查找和替换

热门文章

  1. 全自动过滤器:全自动反冲洗过滤器的特点
  2. JQuery(23)_JQuery 事件
  3. IDL考试前复习笔记(三) 计算NDVI后进行密度分割
  4. NYOJ1294 刚哥遇到了感情问题(二)(字符串处理)
  5. 微信小程序云开发Error: errCode: -404011 cloud function execution error -501003 exceed request limit
  6. esp32的三种用法对比
  7. 关于java使用TDengine数据库以及单体springboot同时搭载mysql和TDengine俩个数据源(上)
  8. 一起学习PHP中GD库的使用(一)
  9. 安科瑞电气智能照明控制系统在地铁照明中的应用
  10. Java导出自定义样式的Excel表格(POI)