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

Вопрос в следующем: можно ли ускорить вычисления, учитывая, что строки не нужно рисовать? Меня интересуют только ширина и высота прямоугольника.


person Halbanonym    schedule 22.04.2011    source источник


Ответы (1)


Сам себе отвечаю после нескольких дней тестирования: нет, к сожалению, нет более быстрого способа с помощью менеджеров компоновки. Использование CoreText также кажется примерно в два раза быстрее, но у самого CoreText есть некоторые неприятные проблемы.

person Halbanonym    schedule 02.05.2011