Я пытаюсь реализовать пользовательский круговой слайдер, который использует образы, чтобы нарисовать циферблат и ручку. Для этой цели я подклассифицировал 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. В противном случае вам нужно сохранить полученные изображения из -imageNamed: когда вы поместите их в переменные экземпляра dialImage/knobImage. – uliwitness
Исправить. Код был написан в среде ARC, поэтому сохранение/освобождение не выполняется. – pajevic