iOS中,[UIFont systemFontOfSize:18]
,这里的18,单位是pt。日常工作中,美工给我们的UI图中表面的字号大小,例如36,单位是px。也即像素大小。下面就来讲一下px和pt的转换。
首先讲两个基本概念:
物理像素:屏幕的实际分辨率,例如4s的640*960、5s的640*1136等。
逻辑像素:物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的。例如4s的320*480、5s的320*568等。
pt: iOS中的字号单位,1pt = 1/72 英寸。
px: 美工给的字体像素大小
DPI : 每英寸的像素数
由上述3个定义可知,1英寸有DPI个像素数。所以,1像素的大小 = 1/DPI 英寸。
1px * DPI = 1英寸 = 1pt * 72
=> 1px * DPI = 1pt * 72
=> 1px = 1pt * 72 / DPI
举个列子:
如果DPI是96,带入公式,我们可以得出,1px = 1pt * 3 / 4, 4px = 3pt
即 4px 的大小和 3pt 的大小相同,所以如果UI给出的是 4px,则我们应该使用 3pt。
即数值大小应该为: pt = px * 3/4 => pt = px * 72 / DPI
结论:pt = px * 72 / DPI
。
如果px是物理像素下的大小,则算出的pt也是物理像素。但是iOS的字号是逻辑像素下的大小。所以需要先将px转换为逻辑像素,即如果是retain屏,例如@2x的,则物理像素px = 逻辑像素px*2。
这里同理,如果美工给你的是2倍图等,要先转成逻辑像素,即px/2。然后算出的pt就是逻辑像素下的字号大小。
Photoshop 默认的DPI就是72
所以也就是说,一般美工给的图,如果字体大小是px,2倍图,则iOS中的字号pt = px / 2
。
eg: 美工给了你一张640*1136的5s用图,并标注其中一行字体大小为28px。首先先将物理像素转换为逻辑像素,即 28 / 2 = 14px
,然后带入公式,pt = 14 * 72 / DPI
,将DPI = 72
带入公式,得pt = 14
,所以可知,对应iOS的字体大小即为14号字体。
在Windows里,默认的显示设置中,把文字定义为96DPI,所以这里吧DPI = 96
带入公式, pt = px * 72 / 96
,即: pt = px * 0.75
。
这里一个很重要的地方,就是美工给的图的DPI,所以小伙伴们一定要看好DPI,再算怎么转换。
这里附上一张mac下如何查看DPI的图。直接使用mac自带的预览工具,菜单栏->工具->显示检测器。