CGGlyph是unsigned short的typedef。 每种字体都可以(或至少可以)为同一个字符指定不同的CGGlyph值。但在同一种字体中,CGGlyph的值是否取决于字体大小?
基本上我想用不同的字体大小显示相同的字符。我可以使用CGContextSetFontSize()设置字体大小并重用CGGlyph值吗?
答案 0 :(得分:4)
CGGlyph在字体中保存字形的索引。这是因为在字体内部,字形(单个字符设计)的顺序可以是任何东西 - 特别是与它所代表的字符代码无关。
也就是说,字体中字符的顺序与任何编码无关。 " A"的字符代码是65(ASCII),但这并不意味着"字体中的第65个字符是字形" A"。对于Unicode来说,几乎不可能使它以这种方式工作:例如,卷曲的左双引号的Unicode是U + 201C,或者是十进制的8220。
因此,每个字体中都有一个或多个表,它们在字形的逻辑索引之间进行转换(只是计算文件本身出现的字符)和一个或多个编码< / em>的。 (编码是预定义的集合,例如&#34; Unicode&#34;,&#34; MacRoman&#34;或&#34; Windows Latin1&#34;。)
这有几个好处:首先,字体文件中的字符不需要以任何特定顺序出现。字体设计器可以根据需要为文件添加尽可能多的编码。此外,字体完全可以包含完全没有编码的字形(想想罕见的连字)。
所有说完了:
每种字体都可以(或至少可以)为同一个字符指定不同的CGGlyph值。
由于CGGlyph是索引值,因此它始终从0开始,最后一个有效有效值是字体中的字符数减1。
字形的索引不由其大小决定,大小设置在一个非常不同的级别。所以你确实可以重复使用不同尺寸的值 但是,值得注意的是:特定字符的索引仅与一个字体唯一关联。每种字体中单个字符的排序应该被认为是唯一的(如果只是因为一种字体可能包含比其他字体更多或更少的字符)。
有关相关讨论,请参阅CGGlyph toUniChar。