показать спиннер внутри ручки NSSlider - PullRequest
1 голос
/ 20 августа 2011

Я бы хотел использовать NSSlider для управления доп.устройство.Потому что доп.Устройство работает медленно, ползунок должен отображать NSProgressIndicator ВНУТРИ РУЧКИ, пока устройство не достигнет значения, указанного ползунком.Но ни панель, ни счетчик не отображаются (ручка сохраняет свой внешний вид по умолчанию).Любые предложения?

@implementation SubclassedNSSliderCell

-(void)drawKnob:(NSRect)knobRect
{
    [spinner setFrame:knobRect]; // as suggested by jtbandes
    [super drawKnob:knobRect]; // keep the default knob
    [spinner drawRect:knobRect]; // draw the spinner on top
}
-(void)drawBarInside:(NSRect)frame flipped:(BOOL)flipped
{
    // stick with default bar
    [super drawBarInside:frame flipped:flipped];
}
-(BOOL)_usesCustomTrackImage
{
    return YES;
}

// default stuff here...
-(id)init // nothing interesting here...
{
    if ((self = [super init]))
    {
        spinner = [[NSProgressIndicator alloc] initWithFrame:
            NSMakeRect(0.f, 0.f, 20.f, 20.f)];
        [spinner setStyle:NSProgressIndicatorSpinningStyle];
        [spinner startAnimation:self];
    }
    return self;
}
@end

РЕДАКТИРОВАТЬ: Эта версия, наконец, отображает счетчик внутри ручки.Но вращение перестает анимироваться, когда ползунок перемещается.Я сдаюсь ...

-(void)drawKnob:(NSRect)knobRect
{
    [super drawKnob:knobRect];
    [[self controlView] addSubview:spinner];
    [spinner setFrame:knobRect];
}
...