CoreText 预备知识点 1

文字排版的基础概念

字体(Font):
和我们平时说的字体不同,计算机意义上的字体表示的是同一大小,同一样式(Style)字形的集合。从这个意义上来说,当我们为文字设置粗体,斜体时其实是使用了另外一种字体(下划线不算)。而平时我们所说的字体只是具有相同设计属性的字体集合,即Font Family或typeface。

字符(Character)和字形(Glyphs):
排版过程中一个重要的步骤就是从字符到字形的转换,字符表示信息本身,而字形是它的图形表现形式。字符一般就是指某种编码,如Unicode编码,而字形则是这些编码对应的图片。但是他们之间不是一一对应关系,同个字符的不同字体族,不同字体大小,不同字体样式都对应了不同的字形。而由于连写(Ligatures)的存在,多个字符也会存在对应一个字形的情况。

CoreText 预备知识点 1_第1张图片
8369_140521152404_1.png

字形描述集(Glyphs Metris)
即字形的各个参数。如下面的两张图:

CoreText 预备知识点 1_第2张图片
8369_140521152502_1.png
CoreText 预备知识点 1_第3张图片
8369_140521152528_1.gif

边框(Bounding Box):
一个假想的边框,尽可能地容纳整个字形。

基线(Baseline):
一条假想的参照线,以此为基础进行字形的渲染。一般来说是一条横线。

基础原点(Origin):
基线上最左侧的点。

行间距(Leading):
行与行之间的间距。

字间距(Kerning):
字与字之间的距离,为了排版的美观,并不是所有的字形之间的距离都是一致的,但是这个基本步影响到我们的文字排版。

上行高度(Ascent)和下行高度(Decent):
一个字形最高点和最低点到基线的距离,前者为正数,而后者为负数。当同一行内有不同字体的文字时,就取最大值作为相应的值。如下图:

CoreText 预备知识点 1_第4张图片
8369_140521152601_1.png

红框高度既为当前行的行高,绿线为baseline,绿色到红框上部分为当前行的最大Ascent,绿线到黄线为当前行的最大Desent,而黄框的高即为行间距。由此可以得出:lineHeight = Ascent + |Decent| + Leading。

更加详细的内容可以参考苹果的这篇文档: 《Cocoa Text Architecture Guide》。当然如果要做到更完善的排版,还需要掌握段落排版(Paragragh Style)相关的知识,但是如果只是完成聊天框内的文字排版,以上的基础知识已经够用了。详细的段落样式相关知识可以参考: 《Ruler and Paragraph Style Programming Topics》

你可能感兴趣的:(CoreText 预备知识点 1)