2014-04-17 90 views
3

我正在使用帶有文本字段的應用程序。在這個字段中寫的文字將被打印出來,並且我遇到了一些諸如表情符號,中文字符等字符的問題......因爲字體不提供這些字符。如何檢查字體是否受字體支持

這就是爲什麼我想要得到字體提供的所有字符(字體被下載,所以我可以直接處理文件或與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回報。這是我想要的,因爲字符''不是由使用的字體提供的。
問題是當我用NSString *characters = @"abc"替換NSString *characters = @"",CTFontGetGlyphsForCharacters再返回false。顯然,我的字體爲所有ASCII字符提供了一個字形。

+0

可能重複[如何判斷一個特定的字體都有一個特定的字形> 64K(http://stackoverflow.com/questions/13005091/how-to-告訴,如果一個特定的字體具有特定字形64k) – rmaddy

+0

你嘗試'abc'。你嘗試過使用單個字符'a'嗎? – smirkingman

+0

是的,但我得到了同樣的結果。 – Morniak

回答

6

我終於解決它:

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

很確定你還需要在返回之前使用CFRelease那種字體,甚至在ARC中。 CF類型不受ARC的影響。 – binarymochi

+0

謝謝!我已更新我的消息。 – Morniak

+0

這一切都意味着CTFontGetGlyphsForCharacters中的錯誤?你不應該每次都創建CTFont ... –