#objective-c #bounding-box #nslayoutmanager
#цель-c #ограничивающий прямоугольник #nslayoutmanager #objective-c
Вопрос:
У меня есть большое количество уникальных строк, для которых я хочу вычислить их ограничивающий прямоугольник, когда они будут расположены в бесконечно большом прямоугольнике. В настоящее время я использую один 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:
Просто отвечаю на это сам после нескольких дней тестирования: нет, к сожалению, более быстрого способа с использованием layout-manager нет. Использование CoreText кажется тоже примерно в два раза быстрее, но у CoreText самого по себе есть некоторые неприятные проблемы.