我想實現一個自定義的圓形滑塊,它使用圖像繪製撥號和旋鈕。爲此,我已將子類別NSSliderCell
並覆蓋了drawBarInside
和drawKnob
方法。 現在,如果我將滑塊類型保留爲默認(水平),則會調用繪圖函數並繪製圖像而不是默認的條形圖和旋鈕(當然由於圖像是爲圓形滑塊創建的,在那兒)。但是,只要我將滑塊類型更改爲循環(在IB中或通過在滑塊單元中設置self.sliderType = NSCircularSlider;
),這兩種方法都不會被調用,並且我的圖像也不會繪製(僅創建標準撥號)。 我在這裏忘了什麼,或者可以不定製圓形滑塊嗎?自定義圓形NSSlider
這裏是我的代碼: DialSliderCell
是NSSliderCell
子類,並開始在一個名爲DialSlider
類是NSSlider
一個子集(這個類沒有別的當時)。
@implementation DialSliderCell
- (id)init {
self = [super init];
if (self) {
dialImage = [NSImage imageNamed:@"dial"];
knobImage = [NSImage imageNamed:@"dialKnob"];
self.sliderType = NSCircularSlider;
}
NSLog(@"init");
return self;
}
- (void)drawKnob:(NSRect)knobRect {
knobRect.size = knobImage.size;
[knobImage drawInRect:knobRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
NSLog(@"drawKnob");
}
- (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped {
[dialImage drawInRect:aRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
NSLog(@"drawBarInside");
}
@end
只是一個短信給任何人複製該代碼:這是隻有使用ARC時纔是正確的。否則,當您將它們放入dialImage/knobImage實例變量中時,您需要保留從-imageNamed獲得的圖像。 – uliwitness 2012-08-13 12:30:42
正確。該代碼是在ARC環境下編寫的,因此不保留/釋放。 – pajevic 2012-08-13 15:40:49