CoreText 预备知识点 1

作者: Laughingg | 来源:发表于2016-09-29 00:04 被阅读42次

    文字排版的基础概念

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

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

    8369_140521152404_1.png

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

    8369_140521152502_1.png 8369_140521152528_1.gif

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

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

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

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

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

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

    8369_140521152601_1.png

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

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

    相关文章

      网友评论

      • 07d93406ec39:大大在瘋狂整理 CoreText 和 TextKit 的資料呀,學習

      本文标题:CoreText 预备知识点 1

      本文链接:https://www.haomeiwen.com/subject/urekyttx.html