在移动端开发中,对于屏幕的适配是一件头痛的事情,相对来说iOS的适配还是很容易实现的。现在来说一说在iOS中的图像大小问题。
1. iOS中的一些高度
在iPhone X发布后,iOS开发时就需要主要顶部与底部高度的适配。
在顶部,增加了刘海,因此导航栏的高度就相应变高了。
在底部,增加了安全距离,因此底部也变高了,具体如下
代码获取:
#define kIs_iphone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define kIs_iPhoneX kScreenWidth >=375.0f && kScreenHeight >=812.0f&& kIs_iphone
/*状态栏高度*/
#define kStatusBarHeight (CGFloat)(kIs_iPhoneX?(44.0):(20.0))
/*导航栏高度*/
#define kNavBarHeight (44)
/*状态栏和导航栏总高度*/
#define kNavBarAndStatusBarHeight (CGFloat)(kIs_iPhoneX?(88.0):(64.0))
/*TabBar高度*/
#define kTabBarHeight (CGFloat)(kIs_iPhoneX?(49.0 + 34.0):(49.0))
/*顶部安全区域远离高度*/
#define kTopBarSafeHeight (CGFloat)(kIs_iPhoneX?(44.0):(0))
/*底部安全区域远离高度*/
#define kBottomSafeHeight (CGFloat)(kIs_iPhoneX?(34.0):(0))
/*iPhoneX的状态栏高度差值*/
#define kTopBarDifHeight (CGFloat)(kIs_iPhoneX?(24.0):(0))
/*导航条和Tabbar总高度*/
2. iOS中的一些大小
下面主要代理苹果手机的屏幕变化。
至于其中的概念就是下一节介绍的。
3. iOS中的点与像素
下面是我的一些理解,如果有问题请评论补充修改。
3.1 分辨率
这里只说显示系统,在一个显示系统,对于细节的分辨能力叫分辨能,简单来说就是清不清晰。平时以 1080 * 1920p、2K、4K等来描述分辨率。这个数据描述的是总的像素数,如横向1080个像素,纵向1920个像素。
分辨率又有图像分辨率和屏幕分辨率
。至于这两种分辨率的区别需要先了解一下像素的概念,见下一节。
3.2 像素
3.2.1 图像像素
我们所看到的图片其实就是一个个像素组成的,这个像素就是图像像素。在数据层面上,图像像素其实就是一个存储颜色信息的数据。颜色信息可以用二进制数据来表示,颜色所用到的二进制位数称之为色彩深度,简称色深。
比如:
一个bit来存储颜色,而一个bit还有0和1,因此最多存储两种颜色,那么以黑白为例,我们所能看到的视频和图片可能就都是黑白的。
如果色深为8bit,16bit呢,就可以表示2^8
,2^16
个颜色。但是图片的大小也会越来越大。通常采用24bit,每一个字节分别存储红黄绿三中原色的信息。
下面我们来计算一张图片的大小,比如一张图片为1920 & 1080的图片,色深为24bit的。
图片大小就是:像素总数 * 色深 / 8 (一个字节 == 8bit)
即就是:1080 * 1920 * 24 / 8 = 5.9MB
因此图像分辨率即就是图像像素的总数。
3.2.2 屏幕像素
显示器中有一个最小的物理单元,不管是LCD的屏幕,还是OLED的屏幕,其实都是让一个具有三组颜色的点发光来实现的,这个物理点,我们称之为屏幕像素。
左OLED,右LCD
这里不介绍屏幕的组成和工作原理,主要说一下屏幕像素。屏幕像素是厂家在制造时就确定了大小,像素之间的距离,屏幕等。因此该屏幕的分辨率
就是整个屏幕像素的总数。
3.2.3 总结
我们经常把经过一英寸有多少像素来判断该屏幕的清晰度——pixels per inch
,简称PPI。
这个来描述分辨率,我认为是比较准确的。
因为不是像素越多,越清晰,这个还需要有一个容器的大小来描述,因为像素是抽象的,我们并不知道一个像素是多大。比如1080 * 1920
的像素总数放在篮球场和放在一张A4纸上,很明显后者会更清晰。
3.3 点
上一节说到了PPI,当然还有一个容易混淆的概念就是——dots per inc
h,即就是DPI。
DPI在显示器与打印方法,也可以用分辨率的描述。
但是在这里不做解释,而是为了说明一下在iOS开发中的pt,即就是point。
2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素。下文也是按照宽度,高度的顺序排列。这个分辨率一直到iPhone 3GS也保持不变。
2010年,iPhone 4发布,率先采用Retina显示屏,在屏幕的物理尺寸不变的情况下,像素成倍增加,达到 640 x 960
像素。
为了兼容之前的App做的UI适配,引入一个新的概念point(点)。点这个概念在iOS开发中十分重要,而非开发者很少关注。iPhone 4屏幕尺寸继续保持320 x 480
,不过单位并非是像素,而是点。
由于固定大小的屏幕引入了更多的像素,因此屏幕模式也便出现了,那么常见的切图@1X@2X@3X就是为了适配不同像素的屏幕。
同理,UIImage中和UIScreen中有一个属性叫scale
,也和这个有关系。