1.术语解释:
系统api中使用了很多术语,这里做一下解释:
字符(Characters) 和字形(Glyphs)
字符(Characters)很好理解,一个字母数字汉字加减符号等
字形(Glyphs):就是指一个字符可以表现为不同的样子,比如下图,就是指字符A的不同字形
字符和字形不是一一对应的,有时候一个字形是由2个字符组成,比如:
字形e +字形 ´ = 字符é
又或者2个f字符形成一个字形,如下图:
字符到显示的字形是由布局管理器( layout manager )来处理的,布局管理器选择显示哪种字形,以及显示在什么位置,还提供了字符和字形之间转换的方法,以及字符和视图坐标之间转换的方法。
2.文本布局Text Layout
文本布局就是把字形排列在显示屏上的过程,大部分语言都是从左到右,从上到下排列,但是有时候可能需要从上往下排列,或者围绕图片周围排列.
换行: 在文本系统中,可以在单词或字形边界处指定换行符
布局管理器沿着(基线)baseline排列视图,如下图
大多数字形都在基线上方,少数会延伸到基线下面去,每个字形都包含一个原点(Origin,图中的实心黑色点),布局系统是根据字形的Origin让它与基线对齐的.
图中的Advance width那个白点就是下一个字形的原点(Origin)
大多数情况下,字形都是一个一个这么排列下去的,每个字形中间的空隙相等,但是有时候这样看起来不美观,比如下图:
第2行为字形间距相等,看起来WAVE单词分的"太开"了,所以就在某些字形之间缩小了间距如第一行.当然如果不需要这种字距调整也可以关闭它,系统提供了对应的方法
字体系统通常以磅(point)来表示字体的大小,在大多数计算机系统中,72磅=1英寸.
字体系统排行时在2行之间加的space成为leading(有时候也叫linegap)所以:行高lineHeight = Ascent+Descent+Line Gap(leading),(似乎和传统金属排版有关),如下图: