zoukankan      html  css  js  c++  java
  • 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上的表现
  • 相关阅读:
    Solr查询参数sort(排序)
    使用SolrNet访问Solr-5.5.0
    java impl
    Solr Facet 搜索时,facet.missing = true 的真正含义
    为solr增加用户验证
    每日晨读_20140705
    说说常用的服务器操作
    如何添加自定义脚本到开机自启动
    记录一个mysql连接慢的问题
    javascript时间戳和日期字符串相互转换
  • 原文地址:https://www.cnblogs.com/cleven/p/13195555.html
Copyright © 2011-2022 走看看