CTFontGetAdvancesForGlyphs如何工作?



CoreText 方法 CTFontGetAdvancesForGlyphs 将此类数组的所有字形的进阶相加并返回总和。

但是,如果数组仅包含 1 个元素:

var offset = CCTFontGetAdvancesForGlyphs(myFont, .default, &myGlyph, nil, 1)

调用该方法只是执行简单的查找,例如访问变量时,还是会在每次调用时触发某种计算?

我想知道当我需要重复某些特定字形的宽度时,我是否需要将结果存储在常量中。

看看这些行,这可能有助于理解函数的用法:

CGGlyph* glyphs = new CGGlyph[count];
CGSize*  advs   = new CGSize[count];
BOOL  ret = CTFontGetGlyphsForCharacters(fntRef, buffer, glyphs, count);
float sum = CTFontGetAdvancesForGlyphs  (fntRef, kCTFontOrientationHorizontal, glyphs, advs, count);
  • 缓冲区包含您的字符串 (UniChar(
  • 对 CTFontGetGlyphsForCharacters 的调用将填充数组字形
  • 对 CTFontGetAdvancesForGlyphs 的调用将使用每个字形的宽度填充数组advs

您现在可以执行以下操作:

CGPoint* positions   = new CGPoint[count];
for(int i=0;i<count;++i) {
positions[i] = CGPointMake(x, y);
x += advs[i].width + someAdditionalOffset;
}
CGContextShowGlyphsAtPositions(context, glyphs, positions, count);

您的字符串将根据您为每个字符设置的位置 x,y 显示。 这组函数对于创建自定义对齐方式、自定义字距调整等非常有用。

相关内容

  • 没有找到相关文章

最新更新