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

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

 

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、列表

 

 

 

3、所有机型参数

4、一些名词解释

(1)PPI 像素密度

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

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

      

(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上的表现

 

posted @ 2020-06-26 17:12  执着的怪味豆  阅读(738)  评论(0编辑  收藏  举报