使用NSLayoutManager获取String的Bounding Rectangle

时间:2011-04-22 10:42:48

标签: objective-c bounding-box 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 个答案:

答案 0 :(得分:0)

经过几天的测试后,Jut自己回答了这个问题:不,不幸的是,没有更快的方式使用布局管理器。使用CoreText似乎也快两倍,但CoreText本身也存在一些令人讨厌的问题。