Cocoa 如何清除NSLayoutManager.drawGlyphsForGlyphRange(…)的效果?

Cocoa 如何清除NSLayoutManager.drawGlyphsForGlyphRange(…)的效果?,cocoa,nsview,appkit,nslayoutmanager,nstextstorage,Cocoa,Nsview,Appkit,Nslayoutmanager,Nstextstorage,我有一个NSScrollView元素,这些元素在NSScrollView中滚动时主要用于绘制不同的文本。我正在使用NSTextStorage、NSLayoutManager和NSTextContainer三者来显示文本,下面是在drawRect方法中绘制文本的调用: layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: NSMakePoint(0, 0)) 我看到的是,在连续调用drawRect时,它将要绘制的新文本覆盖在旧文本之

我有一个
NSScrollView
元素,这些元素在
NSScrollView
中滚动时主要用于绘制不同的文本。我正在使用NSTextStorage、NSLayoutManager和NSTextContainer三者来显示文本,下面是在drawRect方法中绘制文本的调用:

layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: NSMakePoint(0, 0))
我看到的是,在连续调用
drawRect
时,它将要绘制的新文本覆盖在旧文本之上,从而在视觉上造成了一大堆文本

清除上次调用drawRect时绘制的文本的最佳方法是什么,特别是考虑到滚动性能:

A) 在绘制文本之前,在
drawRect
中调用
NSRectFill
——这可以有效地覆盖前面的文本,而且非常简单。在每个卷轴上一遍又一遍地画相同的背景似乎是浪费

B) 查看
NSView.prepareForReuse()
——这种方法似乎更适合于希望“擦除”现有对象的全部内容以重用并从不同状态开始的场景。在我的场景中,我只想删除从
NSLayoutManager
编写的前一个文本

C) 还有别的办法吗