Получите ограничивающий прямоугольник строки с NSLayoutManager - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть большое количество уникальных строк, для которых я хочу вычислить их ограничивающий прямоугольник, когда они будут расположены в бесконечно большом прямоугольнике.В настоящее время я использую один 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 Ответ

0 голосов
/ 03 мая 2011

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

...