Получите ограничивающий прямоугольник строки с NSLayoutManager
У меня есть большое количество уникальных строк, для которых я хочу вычислить их ограничивающий прямоугольник, когда они будут расположены в бесконечно большом прямоугольнике. В настоящее время я использую один NSTextStorage/NSLayoutManager и зацикливаю все строки, собирая прямоугольники:
// setup NSTextStorage and its NSLayoutManager, NSTextContainer
...
forall (NSAttributedString *astring in ...)
{
// put string into textstorage
[textStorage setAttributedString:astring];
// trigger glyph generation and layout
[textContainer setContainerSize: NSMakeSize (CGFLOAT_MAX, CGFLOAT_MAX)];
[layoutManager ensureLayoutForTextContainer: textContainer];
// finally get the bounding box
NSRect boundingBox = [layoutManager usedRectForTextContainer: textContainer];
...
}
Вопрос в том, можно ли ускорить вычисления, учитывая, что строки не нужно рисовать? Меня интересует только ширина и высота прямоугольника.
1 ответ
Решение
Я отвечаю на это сам после нескольких дней тестирования: нет, к сожалению, нет более быстрого способа использования менеджеров по расположению. Использование CoreText кажется слишком быстрым, но у CoreText есть некоторые неприятные проблемы.