Нахождение ограничивающего прямоугольника текста в Core Text

Я пытаюсь найти границы строки текста в Core Text. Для простоты предположим, что он имеет один символ. На данный момент я использую следующий метод:

line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);

Это работает в большинстве случаев, но для некоторых символов, таких как математический курсив d (Unicode: 0x1D451) или математический курсив q (Unicode: 0x1D45E), ширина немного меньше.

Я пытался с помощью CTLineGetTypographicBounds() или же CTFramesetterSuggestFrameSizeWithConstraints, но они также не помогли (я думаю, что они используют продвижение глифа, чтобы найти ширину, а не его графическую ширину.) Поскольку сам шрифт не курсив, я также не могу использовать наклонный угол, чтобы исправить это.

Я попытался получить доступ к глифам напрямую и использовать CTFontCreatePathForGlyph(), но не удалось, так как CGGlyph и UniChar являются 16-разрядными, и мне нужны 32-разрядные символы.

Кто-нибудь знает, если я делаю что-то не так? Если так, то каков правильный путь?

Обновить:

Чтобы убедиться, что это не проблема, связанная со шрифтом, я использовал разные шрифты. Проблема существует даже для символов ASCII в Arial Italic.

Обновить:

Проигнорируйте мое предыдущее обновление! Оказывается, этот (проблема с Arial Italic) был моей собственной ошибкой. Первая проблема все еще стоит, хотя.

2 ответа

Решение

После сообщения об ошибке, которое я сделал, очевидно, это проблема CoreText, появляющаяся в редких случаях. Дам вам знать, как только я найду решение.

Обновление: 15 марта 12 года

Я забыл обновить это раньше, но это исправлено. Исправление в OS X Lion / iOS 5.

Насколько я могу сказать, CTLineGetImageBounds правильная функция для использования. Я предлагаю подать отчет об ошибке в RadarWeb.

Другие вопросы по тегам