提问人:Morniak 提问时间:4/17/2014 更新时间:11/17/2023 访问量:3894
如何检查字体是否支持字符
How to check if a character is supported by a font
问:
我正在开发一个带有文本字段的应用程序。在此字段中写的文本将被打印出来,我对表情符号、汉字等某些字符有疑问......因为字体不提供这些字符。
这就是为什么我想获取字体提供的所有字符(下载字体,以便我可以直接处理文件或 UIFont 对象)。
我听说过,但我不确定这个功能是否能做我想做的事,我无法让它工作。CTFontGetGlyphsForCharacters
这是我的代码:
CTFontRef fontRef = CTFontCreateWithName((CFStringRef)font.fontName, font.pointSize, NULL);
NSString *characters = @"🐯"; // emoji character
NSUInteger count = characters.length;
CGGlyph glyphs[count];
if (CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[characters cStringUsingEncoding:NSUTF8StringEncoding], glyphs, count) == false)
NSLog(@"CTFontGetGlyphsForCharacters failed.");
这里返回 false。这是我想要的,因为所使用的字体不提供字符“🐯”。
问题是当我替换时,再次返回 false。显然,我的字体为所有 ASCII 字符提供了一个字形。CTFontGetGlyphsForCharacters
NSString *characters = @"🐯"
NSString *characters = @"abc"
CTFontGetGlyphsForCharacters
答:
9赞
Morniak
4/28/2014
#1
我终于解决了它:
- (BOOL)isCharacter:(unichar)character supportedByFont:(UIFont *)aFont
{
UniChar characters[] = { character };
CGGlyph glyphs[1] = { };
CTFontRef ctFont = CTFontCreateWithName((CFStringRef)aFont.fontName, aFont.pointSize, NULL);
BOOL ret = CTFontGetGlyphsForCharacters(ctFont, characters, glyphs, 1);
CFRelease(ctFont);
return ret;
}
评论
3赞
binarymochi
5/29/2014
可以肯定的是,即使在 ARC 中,您仍然需要在返回之前对该字体进行 CFRelease 处理。CF 类型不受 ARC 的影响。
0赞
Reuben Scratton
12/14/2017
当然,这一切都意味着CTFontGetGlyphsForCharacters中的错误?您不必每次都创建 CTFont...
上一个:如何检查字体是否支持字符
评论