如何检查字体是否受字体支持

我正在与一个文本字段的应用程序工作。 在这个字段中写的文字将会被打印出来,而且我还有一些像表情符号,中文字符等字符的问题,因为字体不提供这些字符。

这就是为什么我想要得到字体提供的所有字符(字体被下载,所以我可以直接处理文件或与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."); 

这里CTFontGetGlyphsForCharacters返回false 。 这是我想要的,因为字符“🐯”不是由所使用的字体提供的。
问题是当我用NSString *characters = @"🐯"replaceNSString *characters = @"🐯" NSString *characters = @"abc"CTFontGetGlyphsForCharacters再次返回false 。 显然,我的字体为所有的ASCII字符提供了一个字形。

我终于解决了它:

 - (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; }