Получите ограничивающий прямоугольник строки с 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 есть некоторые неприятные проблемы.

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