0

我正在使用三重奏NSLayoutManager, NSTextStorage & NSTextContainer在 layer-backed 中呈现文本NSView

我的印象是,如果我可以覆盖wantsUpdateLayer以返回 true 并因此更充分地使用图层,则视图将具有更高的性能。这是真的?

但是,我看到的所有使用示例NSLayoutManager都说您需要将以下调用置于drawRect

layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: NSMakePoint(0, 0)) 

您将如何在内部updateLayer或其他更面向层的地方执行等效调用?

4

1 回答 1

0

我创建了一个自定义CALayer并覆盖了drawInContext如下方法:

override func drawInContext(ctx: CGContext!) {
    NSGraphicsContext.saveGraphicsState()

    var nsgc = NSGraphicsContext(CGContext: ctx, flipped: false)
    NSGraphicsContext.setCurrentContext(nsgc)

    NSColor.whiteColor().setFill()
    NSRectFill(NSMakeRect(0, 0, 84, 24))

    lm.drawGlyphsForGlyphRange(glyphRange, atPoint: NSMakePoint(0, 0))  // location of textContainer

    NSGraphicsContext.restoreGraphicsState()

}

这可以完成工作,但是

  1. 我不确定是否对保存和恢复上述图形上下文有任何性能影响。
  2. 我不确定如何在 NSView 的updateLayer方法中实现相同的效果,因为它没有要使用的上下文。
于 2015-03-18T05:12:08.570 回答