我使用NSLayoutManager, NSTextStorage & NSTextContainer
的三重奏来渲染支持图层的NSView
中的文字。
如果我可以覆盖wantsUpdateLayer
以返回true并因此更充分地使用图层,那么我认为该视图将更具性能。 这是真的吗?
但是,我所看到的使用NSLayoutManager
的所有示例都表示您需要在drawRect
内进行以下调用:
layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: NSMakePoint(0, 0))
您如何在updateLayer
或其他更多面向图层的地方执行等效调用?
答案 0 :(得分: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()
}
这可以完成工作,但是
updateLayer
方法中实现同样的效果,因为它没有使用上下文。