Как определить, отображается ли символ Unicode на квадрат пропущенных символов? - PullRequest
9 голосов
/ 30 ноября 2009

Есть ли способ определить, присутствует ли символ Unicode в шрифте на iPhone, то есть определить, будет ли символ отображаться на печатном глифе или вместо квадратного символа «отсутствующий символ»?

Например, если я хочу сгенерировать случайный символ Wingding с помощью этого фрагмента:

NSString *s = [NSString stringWithFormat:@"%C", (0x2700 + (arc4random() % 0x0100))];

есть ли способ определить, будет ли сгенерированная строка отображаться в виде маленького квадрата, или настоящий глиф, когда я рисую ее с этим:

[s drawAtPoint:x withFont:[UIFont systemFontOfSize:30]];

Спасибо!

... R

Ответы [ 4 ]

1 голос
/ 19 октября 2012

Мне удалось сделать это с помощью Core Text CTFontGetGlyphsForCharacters :

- (BOOL)isInCharSet:(unichar)character
{
    CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"Arial", 0.0, NULL);
    unichar characters[] = {character};
    CGGlyph glyphs[] = {};

    return (BOOL)CTFontGetGlyphsForCharacters(fontRef, characters, glyphs, 1);
}
1 голос
/ 03 декабря 2009

NSFont имеет свойство coveredCharacterSet, которого нет в UIFont. Поэтому я бы порекомендовал использовать ваш настольный ПК для создания информации о комплектеCharacterSet и помещения ее в приложение для iphone.

Список шрифтов, доступных на iphone, можно найти по адресу: http://daringfireball.net/misc/2007/07/iphone-osx-fonts

0 голосов
/ 04 декабря 2009

Почему бы не сгенерировать его на своем компьютере, если вы используете системный шрифт, это должен быть Helvetica, а в меню Font меню практически любой программы есть карты символов.

0 голосов
/ 03 декабря 2009

Я не знаю ни одного метода, который бы специально проверял это, однако я думаю, что можно было бы установить NSDictionary с парными значениями для каждой таблицы символов, закодированных в Unicode, а затем запустить проверку, чтобы убедиться, что сгенерированное значение попадает в диапазоны, заданные одним из парных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...