2010-09-05 59 views
1

我想繪製一個NSTextFieldCell子類,看起來像在iCal中的圓形事件項目正常表。圓形NSTextFieldCell像iCal

基於this question,我有下面的代碼在我的子類:

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 

    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor lightGrayColor] endingColor:[NSColor grayColor]]; 
    [gradient drawInRect:cellFrame angle:90]; 
    controlView.layer.cornerRadius = 0.5f; 
    [[self title] drawInRect:cellFrame withAttributes:nil]; 
} 

但這只是繪製細胞作爲一個正常的矩形,用漸變填充,但沒有圓角。我明顯錯過了一些東西,但是什麼?

+1

如果此代碼未在GC下運行,請不要忘記釋放漸變對象。 – 2010-09-05 19:30:33

回答

1

基於this question,我有下面的代碼在我的子類:...

就這個問題接受的答案假定細胞在文本字段中(即,它是視圖中唯一的單元格,並且它實際上是整個視圖),並且該視圖是或可以分層支持的。

當你是一個表格的單元格時,這是行不通的,因爲你不應該重畫整個視圖並使其支持層狀可能不會正常工作。 (我不確定人們可以期望層支持文本字段正常工作,除了普通的NSView之外,任何東西都可以工作,或者不支持;如果文檔沒有說明,假設事實並非如此。)

[gradient drawInRect:cellFrame angle:90]; 

但這只是繪製細胞作爲一個正常的矩形,用漸變填充,但沒有圓角。

是。這就是所有這種方法所做的,所以如果沒有指定圓角(例如,作爲圖層的圓角半徑),則需要自己構造並繪製帶有圓角的圖形。

爲此,create a path for a rectangle with rounded cornersdraw the gradient in that

+0

非常好,謝謝你的幫助!正是我想要的。 – 2010-09-06 07:33:31

+0

如果它幫助其他人,我班的最終代碼在這裏:http://www.yellowfield.co.uk/blog/?p=17 – 2010-09-10 12:23:54

2

有關調用什麼:

[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel]; 
+0

仍然將其繪製爲具有漸變填充的矩形。 – 2010-09-05 18:35:55