iOS适配机型常用宏以及机型尺寸备注

摘要:
CGSizeEqualToSize:NO)2。列表3。所有型号的参数4。一些名词解释PPI像素密度意味着对角线上每英寸的像素数。PPI值越高,显示屏可以显示图像的密度越高,即分辨率越高,颗粒度越弱,图像越清晰。iPhone 6Plus的水平和垂直方向的像素密度已放大到3倍,成像分辨率已提高到iPhone 3GS的9倍。如果我们在设计时使用单位px,我们可以说它是物理分辨率大小;如果单位是pt,可以说是逻辑分辨率大小。

关于物理和逻辑分辨率再整理一下,虽然并不关心太多的硬件原理,但是还是留个地方方便查阅吧。

1、代码

#pragma mark - 判断机型
/*
 设备是否为iPhone4、iPhone4S
 (1)逻辑分辨率(point):320x480
 (2)物理分辨率(pixel,像素):640x1136
 (3)缩放因子 :@2x
 (4)PPI(像素密度): 326
 (5)对角线:3.5 inch
 */
#define iPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640,960), [[UIScreen mainScreen] currentMode].size) : NO)
/*
 设备是否为iPhone5、iPhonec5C、iPhone5S
 (1)逻辑分辨率(point):320x568
 (2)物理分辨率(pixel,像素):640x1136
 (3)缩放因子 :@2x
 (4)PPI(像素密度): 326
 (5)对角线:4 inch
 */
#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
/*
 设备是否为iPhone6、iPhone7、iPhone8
 (1)逻辑分辨率(point):375x667
 (2)物理分辨率(pixel,像素):750x1334
 (3)缩放因子 :@2x
 (4)PPI(像素密度): 326
 (5)对角线:4.7 inch
*/
#define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
/*
 设备是否为iPhone6Plus 、iPhone7Plus、iPhone8Plus
 (1)逻辑分辨率(point):414x736
 (2)物理分辨率(pixel,像素):1242x2208,但是实际为1080*1920,显示前做缩放
 (3)缩放因子 :@3x
 (4)PPI(像素密度): 401
 (5)对角线:5.5 inch
 */
#define iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeEqualToSize(CGSizeMake(1242,2208), [[UIScreen mainScreen] currentMode].size)) : NO)
/*
 设备是否为iPhoneX、iPhoneXS
 (1)逻辑分辨率(point):375*812
 (2)物理分辨率(pixel,像素):1125x2436
 (3)缩放因子 :@3x
 (4)PPI(像素密度): 458
 (5)对角线:5.8 inch
 */
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125,2436), [[UIScreen mainScreen] currentMode].size) : NO)
/*
 设备是否为判断iPHoneXR
 (1)逻辑分辨率(point):414*896
 (2)物理分辨率(pixel,像素):828x1792
 (3)缩放因子 :@2x
 (4)PPI(像素密度): 326
 (5)对角线:6.1 inch
 */
#define iPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828,1792), [[UIScreen mainScreen] currentMode].size) : NO)
/*
 设备是否为判断iPhoneXs Max
 (1)逻辑分辨率(point):414*896
 (2)物理分辨率(pixel,像素):1242*2688
 (3)缩放因子 :@3x
 (4)PPI(像素密度): 458
 (5)对角线:6.5 inch
 */
#define iPhoneXS_MAX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242,2688), [[UIScreen mainScreen] currentMode].size) : NO)

2、列表

iOS适配机型常用宏以及机型尺寸备注第1张

3、所有机型参数

iOS适配机型常用宏以及机型尺寸备注第2张

4、一些名词解释

(1)PPI 像素密度

表示沿着对角线,每英寸所拥有的像素(pixel)数目,PPI的数值越高,代表显示屏能够以越高的密度显示图像,即通常所说的分辨率越高,颗粒感越弱,图像更清晰。

举例: 根据勾股定理:iPhone4/iPhone4s的PPI的计算值:

    iOS适配机型常用宏以及机型尺寸备注第3张  iOS适配机型常用宏以及机型尺寸备注第4张

(2)缩放因子

  • 早期的iPhone3GS的屏幕屏幕分辨率是320 * 480,iOS绘制图形(CGPoint/CGSize/CGRect)均已point为单位:1point = 1 pixel
  • 后来在iPhone4中,同样大小(3.5inch)的屏幕采用Retina(视网膜)屏幕显示技术,横、纵向方向像素密度都被放大到2倍,像素分辨率提高到(320 * 2) * (480 * 2) = 640 * 960,显像分辨率提高到iPhone3GS的4倍。iPhone6Plus中横、纵向方向像素密度都被放大到3倍,显像分辨率提高到iPhone3GS的9倍。
  • scale= 单位长度内的数量比(pixel/point)

(3)物理分辨率和逻辑分辨率

  • 俗话说物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的。
  • 从另外的角度来说:分辨率就是屏幕上横、纵的总象素点数。如果我们设计的时候用单位px,可以说是物理分辨率尺寸;如果用单位pt,可以说是逻辑分辨率尺寸。

5、关于iPhone6Plus的物理分辨率的问题

iPhone6plus的实际物理像素是标准的1080x1920,但是图片渲染分辨率是1242x2208,目前就是iPhone6Plus、iPhone7Plus、iPhone8Plus有这个特殊情况。

(1)系统中获取的是1242x2208物理分辨率

(2)截图出来看到的也是1242x2208的分辨率

(3)缩放比是3,逻辑分辨率是414x736,对应的物理分辨率就是 1242 x2208。。同时, 对应到物理屏幕上“真实”的1080x1920,需要进行缩放处理。

(4) 为什么不直接使用1242x2208的物理分辨率,或者说,在缩放比为3的情况下,为什么逻辑分辨率是414x736?(为什么不降低逻辑分辨率,拿1080➗3来算?)

  下面是网上的一些分析:

  • 如果采用1080➗3,得到的逻辑分辨率是360x640,比iPhone6还低,虽然也可以这么做,但是明显这样“不合适”。因为这也意味着虽然屏幕变大了,像素高了,但是单位面积显示的内容变少了。
  • 如果采用1080➗2,得到的逻辑分辨率是540x960,这样,pt面积比iPhone6高了两倍,也就是显示的内容变多了。但是,会导致UI元素尺寸一下子变小了,比如导航栏按钮的物理高度只有原来的81.5%,点击面积就只有0.815的平方=66.4%。(通俗理解:虽然pt面积大了两倍,但是实际屏幕可视范围并没有大两倍,所以控件必须变小才可以满足比原来显示的内容多两倍)。如果控件变小,那么需要出对应的一套差异较大的新的UI设计规范,显然这不合适。
  • 如果直接把实际物理像素提高到1242x2208,缩放比依然是3,逻辑分辨率是414*736,这样不存在缩放。。但是,苹果应该是技术工艺达不到,只能是1080x1920,而且,此分辨率应该只是过渡
  • 为什么定在414x736的逻辑分辨率?估计是结合 5.5inch 和 ppi=401 这两个前提限定的情况下,按这个 414x736 pt 分辨率,屏幕上 UI 元素操作物理大小最接近 iPhone 6上的表现

免责声明:文章转载自《iOS适配机型常用宏以及机型尺寸备注》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇移动端H5页面遇到的问题总结Pandas日期数据处理:如何按日期筛选、显示及统计数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

opencv输出图片像素值

需求:在控制台输出灰度图像的像素值 代码: #include <stdio.h>#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgpr...

当微信小程序遇到AR(二)

当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习。 本课程需要一定的基础:微信开发者工具,JavaScript,Html,Css 第二章:基石-摄像头数据获取 【前情提要】 上一章,我们了解了微信小程序与AR相遇一些前因后果,同时也,罗列出来是要实现这样...

安装cuda实践

------------恢复内容开始------------ 开头想网络安装,发现从invidia下载东西很慢,改为下载到本地再安装。 反正证书之类的,需要先下载到本地再安装。kx上网或者不kx上网,两个方式都尝试下,下载证书或者是安装包。 两个方式都不能下载的话,我安装uget,然后就下载成功了。而,uget网上说需要先add ppa,这样操作是失败的。...

解决win10分辨率过高导致某些软件显示小的办法

右键->属性->兼容性->更改所有用户的设置->更改高DPI设置->高DPI缩放替代->勾选替代高DPI的缩放行为指定系统(在应用程序,系统,系统增强里选系统) 参考链接: https://blog.csdn.net/weixin_41391865/article/details/82729757...

Cesium源码剖析---Ambient Occlusion(环境光遮蔽)

  Ambient Occlusion简称AO,中文没有太确定的叫法,一般译作环境光遮蔽。百度百科上对AO的解释是这样的:AO是来描绘物体和物体相交或靠近的时候遮挡周围漫反射光线的效果,可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强...

Unity面试题汇总(第一部分)

一、什么是渲染管道? 答:就是告诉GPU一些数据,经过一系列的操作,得到最终要显示的数据。渲染管道中的很多步骤,总的来说是将几何物体从一个坐标系变换到另一个坐标系中去。 主要步骤如下: 本地坐标系 -- 经过世界变换矩阵 --> 世界坐标系 -- 经过视图变换矩阵 --> 视图坐标系 -- 经过投影变换矩阵 --> 投影坐标系 -- 经过...