IOS 关于分辨率的那点事

本文深入解析iOS设备分辨率、设计时的点与分辨率关系,以及图片命名与图标规范,旨在帮助界面设计者高效应对不同分辨率的iOS设备,简化开发流程,提升开发体验。

转载自:http://www.cnblogs.com/BigPolarBear/archive/2012/03/26/2417777.html

 

都说做iOS开发比Android省心,那么iOS是如何做到这一点的呢?我们今天就来分析一下,希望对做iOS的界面设计的同学有点帮助。

 

1 iOS设备的分辨率

iOS设备,目前最主要的有3种(Apple TV等不在此讨论),按分辨率分为两类

iPhone/iPod Touch

普屏分辨率    320像素 x 480像素

Retina分辨率 640像素 x 960像素

iPad,iPad2/New iPad

普屏        768像素 x 1024像素

Retina屏  1536像素 x 2048像素


2  iOS设计时用的点与分辨率的关系

尽管有上面列出的4种分辨率情况,不过细心的人会发现,对于Retina屏的分辨率始终保持为普屏的2倍,这对于iOS的设计还是开发的时候提供的莫大的方便,自然可以想到对于界面设计而言,只需要设计一套,然后进行等比例放大缩小即可。实际进行设计与开发的时候,也确实是这样,Apple为了防止在交流过程中(尤其对于编程实现)分辨率对思维的迷惑,统一使用点(Point) 对界面元素的大小进行描述,例如: 

iPhone/iPod Touch

界面描述    320点 x 480点

iPhone/iPad

界面描述    768点 x 1024点

换算关系 

普屏       1点 = 1像素 

Retina屏 1点 = 2像素 

这样,不管我们是在为普屏还是Retina屏进行设计与开发,我们都可以清楚地,并且统一地使用点对界面元素的大小进行描述了。


3  iOS界面图片的命名

现在我们能够用统一的语言描述两种屏幕的界面元素的大小,但是我们如何针对不同屏幕设置不同分辨率的图片素材呢?难道说开发的时候我们要在每一个图片加载的地方进行,添加判断当前设备是否是Retina屏的语句,然后加载对应的图片吗?当然可以这样做,但是iOS有一套更简便的方法进行自动加载,即通过规范的文件名命名。例如下面这条加载图片的语句:

[UIImage imageNamed:@" pic.png " ]]  

在实际运行时,如果发现当前的设备是Retina屏,会自动寻找图片"pic@2x.png" ,自动加载针对Retina屏的图片素材,是不是很方便呢?

所以,我们在制作iOS设备时,可以仿照下面这样,对图片文件进行分类,对于640x960文件夹里的图片,文件命名添加"@2x"即可。

 

4  iOS应用常用图标的命名规范

可以参考下面两个文档:

Apple对此问题的Q&A  

Apple的官方说明文档

请务必按照文档中描述的规范进行图标的命名!!

 

PS:一些额外的图标参考

a 图标会自动添加高亮效果,如果不需要,可以在plist中明确指定UIPrerenderedIcon 的键值去掉

b 57像素的普屏的iPhone图标,图标圆角的半径为10像素

c 114像素Retina屏的iPhone图标,图标圆角的半径为20像素

d 512像素的用于iTunes/App Store的图标,在实际显示是会被缩放到175像素进行显示(但提交是不可以提交175像素)

e 72像素的普屏iPad图标,图标圆角的半径为13像素

f 144像素Retina屏iPad图标,图标圆角的半径为26像素

g 50像素iPad的Spotlight搜索图标的最终视觉大小是48像素,原因是iOS会对图标的每个边去掉1个像素,添加阴影效果

h 100像素Retina屏的Spotlight搜索图标的最终视觉大小是96像素,原因同上,这次是每边减2个像素

iOS设备上查看屏幕分辨率,可以通过编程方式获取当前设备的屏幕信息。以下是一个使用Swift语言获取屏幕分辨率的方法: ### 获取iOS设备的屏幕分辨率 #### 使用`UIScreen`类 iOS SDK 提供了`UIScreen`类来获取与屏幕相关的信息,包括分辨率和屏幕尺寸。 ```swift import UIKit // 获取主屏幕 let mainScreen = UIScreen.main // 获取屏幕的物理分辨率(以像素为单位) let nativeBounds = mainScreen.nativeBounds print("屏幕分辨率: \(nativeBounds.size.width) x \(nativeBounds.size.height)") // 获取屏幕的逻辑分辨率(以为单位) let bounds = mainScreen.bounds print("逻辑分辨率: \(bounds.size.width) x \(bounds.size.height)") ``` - `nativeBounds` 返回的是屏幕的原始分辨率,通常用于图像处理或需要精确控制像素的场景[^1]。 - `bounds` 返回的是逻辑分辨率,即应用程序可用的屏幕区域大小,单位是“”(points),这是iOS开发中常用的布局单位[^1]。 #### 屏幕比例与适配 不同型号的iPhone具有不同的屏幕比例和分辨率。例如: - iPhone 8 的分辨率为 750x1334 像素,逻辑分辨率为 375x667 ,比例为 2x。 - iPhone 12 Pro Max 的分辨率为 1284x2778 像素,逻辑分辨率为 428x926 ,比例为 3x。 通过`UIScreen.main.scale`可以获取当前屏幕的比例因子,该值决定了1个对应多少像素(如2x表示每个对应2x2像素)[^1]。 #### 示例代码:打印屏幕相关信息 ```swift func printScreenInfo() { let screen = UIScreen.main let nativeSize = screen.nativeBounds.size let logicalSize = screen.bounds.size let scale = screen.scale print("原生分辨率 (像素): \(nativeSize.width) x \(nativeSize.height)") print("逻辑分辨率 (): \(logicalSize.width) x \(logicalSize.height)") print("屏幕比例因子: \(scale)") } printScreenInfo() ``` 此方法适用于所有iOS设备,并且不会依赖于具体的设备型号,因此更加可靠和通用[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值