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 显示。 这组函数对于创建自定义对齐方式、自定义字距调整等非常有用。