Прежде чем я задам свои вопросы, это из документации Apple: как определить ширину строки с помощью Quartz:
Если измерения текста важны для вашего приложения, их можно рассчитать с помощью функций Quartz 2D. Тем не менее, вы могли бы сначала рассмотреть возможность использования ATSUI, сила которого заключается в разметке и измерении текста. ATSUI имеет несколько функций, которые получают текстовые метрики. Вы можете не только получить текстовые метрики после макета, но и в тех редких случаях, когда они вам нужны, вы можете получить текстовые метрики до макета. В отличие от кварца, для которого вы должны выполнить вычисления самостоятельно, ATSUI вычисляет измерения для вас. Например, вы можете получить ограничивающий прямоугольник изображения для текста, вызвав функцию ATSUI ATSUMeasureTextImage.
Если вы решите, что текст Quartz больше соответствует вашим потребностям, чем текст ATSUI (или Cocoa), вы можете выполнить следующие шаги, чтобы измерить ширину текста, прежде чем Quartz его прорисует:
- Вызовите функцию CGContextGetTextPosition, чтобы получить текущую позицию текста.
- Установите режим рисования текста на kCGTextInvisible, используя функцию CGContextSetTextDrawingMode.
- Нарисуйте текст, вызвав функцию CGContextShowText, чтобы нарисовать текст в текущей позиции текста.
- Определите окончательную позицию текста, вызвав функцию CGContextGetTextPosition.
- Вычтите начальную позицию из конечной позиции, чтобы определить ширину текста.
Вот мои вопросы:
-
Это действительно лучший способ определить ширину строки с помощью Core Graphics? Это кажется неубедительным, и поскольку мой текст сосуществует с двухмерными графическими элементами, я хотел бы использовать один и тот же контекст для всего рендеринга. Я надеялся, что будет какой-то компактный метод, например:
CGContextGetTextWidthAndHeight(context, text);
-
Я читал, что ATSUI устарел и будет заменен Core Text. Это правда, и если да, то в iOS?