对于小型项目,我需要以字体显示所有字形名称。所以,我想这样做:
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");
}
创建字体并获取字形计数就可以了。但是,字形的名称始终为NULL。 CTGlyphInfoRef变量'gi'得到一个值。有什么想法吗?我在这里缺少什么?
答案 0 :(得分:3)
你误解了CTGlyphInfo
的含义。它不是查询有关字形信息的方法。它表示将字形替换为字符串。您可以将字形信息对象设置为属性字符串中kCTGlyphInfoAttributeName
属性的值。如果文本与基本字符串匹配,那么该字形将替换该范围的属性文本。
您可以使用CGFontCopyGlyphNameForGlyph()
从字体中获取字形的名称。您可以使用CGFontRef
函数直接创建CGFontCreate...()
。您也可以使用CTFont
从CTFontCopyGraphicsFont()
创建一个。