Поиск текста, ограничивающего прямоугольник в основном тексте
Я пытаюсь найти границы строки текста в Core Text. Для простоты предположим, что он имеет один символ.
В настоящий момент я использую следующий метод:
line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);
Он работает большую часть времени, но для некоторых символов, таких как математический d (Unicode: 0x1D451) или математический q (Unicode: 0x1D45E), ширина немного коротка.
Я попытался использовать CTLineGetTypographicBounds()
или CTFramesetterSuggestFrameSizeWithConstraints
, но они тоже не помогли (я думаю, что они используют глиф, чтобы найти ширину, а не ее графическую ширину.) Поскольку сам шрифт не является курсивом, я также не может использовать угол наклона, чтобы исправить это.
Я попытался получить доступ к глифам напрямую и с помощью CTFontCreatePathForGlyph()
, но не смог, поскольку CGGlyph и UniChar являются 16-битными, и мне нужны 32-битные символы.
Кто-нибудь знает, что я делаю что-то неправильно? Если да, то какой правильный путь?
Update:
Чтобы убедиться, что это не проблема, связанная с шрифтом, я использовал разные шрифты. Проблема существует даже для символов ASCII в Arial Italic.
Update:
Игнорировать мое предыдущее обновление! Оказывается, это одна (проблема с Arial Italic) была моей собственной ошибкой. Первая проблема все еще стоит.
Ответы
Ответ 1
После отчета об ошибке, который я сделал, очевидно, это проблема CoreText, появляющаяся в редких случаях. Сообщает вам, как только я нахожу исправление.
Обновление: 15 марта '12
Я забыл обновить это раньше, но это исправлено. Исправление находится в OS X Lion/iOS 5.
Ответ 2
Насколько я могу судить, CTLineGetImageBounds
- это правильная функция для использования. Я предлагаю подать отчет об ошибке в RadarWeb.