2014-04-17 4 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 = @""을 , CTFontGetGlyphsForCharacters으로 바꿔서 문제가 다시 발생했습니다. 거짓입니다. 분명히, 내 글꼴은 모든 ASCII 문자에 대한 글리프를 제공합니다.

+0

가능한 중복 [특정 글꼴이 특정 문양이있는 경우 말하는 방법> 64 K] (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

ARC에서도 돌아 오기 전에 CFRelease 글꼴을 사용해야합니다. CF 유형은 ARC의 영향을받지 않습니다. – binarymochi

+0

감사! 내 메시지를 업데이트했습니다. – Morniak

+0

이 모든 것이 CTFontGetGlyphsForCharacters의 버그를 의미합니까? 매번 CTFont를 만들 필요는 없습니다 ... –