对于一个小型副项目,我需要在字体中提供所有可用的字形名称。所以,我想这样做:
CTFontRef f = CTFontCreateWithName(CFSTR("Zapfino"), 40, NULL);
CFIndex count = CTFontGetGlyphCount(f);
printf("There are %ld glyphs\n", count);
for (CGGlyph i = 1; i < count + 1; i++)
{
CTGlyphInfoRef gi = CTGlyphInfoCreateWithGlyph(i, f, CFSTR("(c)"));
CFStringRef name = CTGlyphInfoGetGlyphName(gi);
CGFontIndex idx = CTGlyphInfoGetCharacterIdentifier(gi);
printf("Glyph: %4hu, idx: %4hu ", i, idx);
CFShow(name);
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
创建字体并获取字形计数效果很好。但字形的名称始终为 NULL。CTGlyphInfoRef 变量“gi”获取一个值。有什么想法吗?我在这里缺少什么?
你误解了它CTGlyphInfo的意思。这不是查询字形信息的方法。它是用字形替换字符串的表示。您可以将字形信息对象设置为kCTGlyphInfoAttributeName属性字符串中属性的值。如果文本与基本字符串匹配,则该字形将替换该范围的属性文本。
您可以使用CGFontCopyGlyphNameForGlyph()从字体获取字形的名称。CGFontRef您可以直接使用函数创建CGFontCreate...()。CTFont您还可以使用 using来创建一个CTFontCopyGraphicsFont()。
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |