Нахождение ограничивающего прямоугольника текста в 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.