Работя върху приложение с текстово поле. Текстът, написан в това поле, ще бъде отпечатан и имам проблем с някои знаци като емотикони, китайски йероглифи и т.н., защото шрифтът не предоставя тези знаци.
Ето защо искам да получа всички символи, предоставени от шрифт (Шрифтът се изтегля, за да мога да работя директно с файла или с 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 = @"????"
с NSString *characters = @"abc"
, CTFontGetGlyphsForCharacters
връща отново false. Очевидно моят шрифт предоставя глиф за всички ASCII символи.