1、iphone尺寸
设备iPhone | 对角线 Diagonal | 逻辑分辨率(point) | Scale Factor | 设备分辨率(pixel) |
---|---|---|---|---|
3GS | 3.5-inch | 320x480 | @1x | 320x480 |
4(s) | 3.5-inch | 320x480 | @2x | 640x960 |
5c | 4-inch | 320x568 | @2x | 640x1136 |
5(s) | 4-inch | 320x568 | @2x | 640x1136 |
6 | 4.7-inch | 375x667 | @2x | 750x1334 |
6+ | 5.5-inch | 414x736 | @3x | 1080x1920 |
7 | 4.7-inch | 375x667 | @2x | 750x1334 |
7+ | 5.5-inch | 414x736 | @3x | 1080x1920 |
2、名词解释
- 宽高(width/height):手机的物理尺寸,包括显示屏和边框。
- 屏幕尺寸:通常所说的iPhone5屏幕尺寸为4英寸、iPhone6屏幕尺寸为4.7英寸,指的是显示屏对角线的长度(diagonal)。
- 像素密度PPI(Pixel Per Inch by diagonal):表示沿着对角线,每英寸所拥有的像素(Pixel)数目。
注意:PPI数值越高,代表显示屏能够以越高的密度显示图像,即通常所说的分辨率越高、颗粒感越弱。
3、示意图
4、@2X 和@3X适配问题
@2X
- iPhone3GS时代,我们为一个应用提供图标(或按钮提供贴图),只需要icon.png。针对现在的iPhone4~6 Retina显示屏,需要制作额外的@2x高分辨率版本。
- 例如在iPhone3GS中,scale=1,用的图标是50x50pixel(logicalimage.size=50x50point);在iPhone4~6中,scale=2,则需要100×100pixel(logical image.size=50x50point,乘以image.scale=dimensions in pixels),并且命名为icon@2x.png。
- 如果APP要同时兼容iPhone3GS~iPhone6,则需要提供icon.png/icon@2x.png两种分辨率的图片。
@3x
- iPhone6+在实际渲染时,downsampling/1.15(1242x2208->1080x1920),准确的讲,应该是@2.46x。苹果为方便开发者用的是@3x的素材,然后再缩放到@2.46x上。
参考:
为什么 iPhone 6 Plus 要将 3x 渲染的 2208x1242 分辨率缩小到 1080p 屏幕上?
iPhone 6 Plus屏幕分辨率
5、iOS UIImage 加载图片方式
imageNamed:该方法使用系统缓存,适合表视图重复加载图像的情形。同时该API根据UIScreen的scale,自动查找包含对应高倍图后缀名(@2x)的文件,如果找到二倍图,则image.scale=2.0,对应逻辑size大小以point度量(pixel度量的一半);如果没找到设置默认image.scale=1.0,对应逻辑size大小同像素尺寸。因此,使用该方法,无需特意指定高倍图后缀。在实际运行时,系统如果发现当前设备是Retina屏(scale=2),会自动寻找"*@2x.png"命名格式的图片,加载针对Retina屏的图片素材,否则会失真。
imageWithContentsOfFile/imageWithData/initWithContentsOfFile/initWithData:这组方法创建的UIImage对象没有使用系统缓存,并且指定文件名必须包含明确的高倍图后缀。如果文件名包含@2x后缀,则image.scale=2.0;否则默认image.scale=1.0,同样对于Retina屏将会失真。
目前,适配iPhone6+时,除了一些铺满全屏的大图(LogoIcon、LaunchImage)需提供三倍图,其他的小图仍可沿用原有的二倍图自适应拉伸。
对于iPhone3、4/5/6、6+三类机型,需要按分辨率提供相应的高倍图并且文件名添加相应后缀,否则会拉伸(stretchable/resizable)失真(模糊或边角出现锯齿)