2014-11-06 76 views
0

我需要修飾包含當前選區邊框的段落。這裏有一個樣機,其中插入點在某處第二段:圍繞NSString的一部分繪製框

Mockup

現在我得到它包含了當前選擇點,在我NSTextView子我重寫段CGRectdrawRect和做

var path = NSBezierPath(roundedRect: currentParagraphRect, xRadius: 4, yRadius: 4) 
path.stroke() 

這確實周圍畫段落一個框,但它不會刪除它,所以我留下的未擦除線亂七八糟的文件的進展。

我不確定這是否是正確的覆蓋點,因爲我覺得drawRect應該只能被調用幾次,而不是每一次選擇點都會改變,這種情況會發生很多。

我在錯誤的軌道上嗎?我應該重寫不同的繪圖機制嗎?

或者我應該要求佈局管理器爲每個段落創建一個NSTextView,然後在整個視圖中繪製一個框?

回答

1

我不確定這是否是正確的覆蓋點,因爲我感覺drawRect應該只能被調用幾次,而不是每一次選擇點都會改變,這會發生很多。

drawRect:被所有時間調用,這是一個非常非常流行的功能。這就是爲什麼你發送rect作爲參數,所以你不必在每次被調用時重畫整個視圖。

如果你想不斷嘗試重寫-drawRect:,你需要撫摸到它之前整個RECT油漆過,而你做到這一點,每次

self.backgroundColor.setFill() 
NSBezierPath.fillRect(dirtyRect) 
// draw your oval around the current paragraph 
// call super 

然後,每次選定段落的變化,你需要確保調用setNeedsDisplay: