我需要用边框装饰包含当前选择的段落。这是一个模型,插入点位于第二段中的某个位置:
现在我收到包含当前选择点的段落的CGRect
,在我的NSTextView
子类中,我正在覆盖drawRect
并执行
var path = NSBezierPath(roundedRect: currentParagraphRect, xRadius: 4, yRadius: 4)
path.stroke()
这确实在段落周围画了一个方框,但它没有删除它,所以随着文档的进展我留下了一堆乱糟糟的行。
我不确定这是否是正确的覆盖点,因为我觉得drawRect
应该只被调用几次,而不是每次选择点都会改变,这种情况会发生很多。
我走错了路吗?我是否应该覆盖不同的绘图机制?
或者我应该要求布局管理器为每个段落创建一个NSTextView,然后在整个视图周围绘制一个框?
答案 0 :(得分:1)
我不确定这是否是正确的覆盖点,因为我感觉drawRect应该只被调用几次,而不是每次选择点都会改变,这种情况会发生很多。
drawRect:
一直被调用,这是一个非常非常受欢迎的功能。这就是您将rect
作为参数发送的原因,因此您不必在每次调用时重绘整个视图。
如果你想继续试图覆盖-drawRect:
,你需要先画一遍整个矩形,然后再每次都这样做
self.backgroundColor.setFill()
NSBezierPath.fillRect(dirtyRect)
// draw your oval around the current paragraph
// call super
然后,每次选定的段落发生变化时,您都需要确保调用setNeedsDisplay:
。