Я работаю над приложением с текстовым полем. Текст, написанный в этом поле, будет напечатан, и у меня есть проблема с некоторыми символами, такими как смайлики, китайские иероглифы и т. д., потому что шрифт не предоставляет эти символы.
Вот почему я хочу получить все символы, предоставленные шрифтом (шрифт загружается, поэтому я могу работать непосредственно с файлом или с объектом 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.