objective-c – 循环NSSlider带停止(非连续)

我不知道如何更好地将其作为标题,但我需要制作一个可作为普通音量旋钮使用的NSSlider.此刻,当我按住鼠标并将其移动到控件周围时,它会旋转很多次.我需要它停在“0”位置和“100”位置,当我向另一个方向拖动时,我不能让它从0跳到100.我希望我明白这一点.有谁知道怎么做或有任何建议? 最佳答案 一个老问题,但无论如何我们去了:

(1)将滑块设置为100个刻度线

(2)选择“仅停留在刻度线”

(3)在Interface Builder中,将自定义单元类设置为SBCustomSliderCell

使用以下代码:

@interface SBCustomSliderCell()

@property CGFloat lastSliderValue;

@end

@implementation SBCustomSliderCell

- (void)awakeFromNib
{
    self.lastSliderValue = -1;
}

- (double)closestTickMarkValueToValue:(double)value
{
    double proposedValue = [super closestTickMarkValueToValue:value];

    if (self.lastSliderValue == -1)
    {
        self.lastSliderValue = proposedValue;
        return proposedValue;
    }

    double MAX_JUMP = 50;

    double tickDifference = ABS(self.lastSliderValue - proposedValue);

    BOOL isTurningUp = proposedValue > self.lastSliderValue;

    if (tickDifference > MAX_JUMP)
    {
        proposedValue = isTurningUp ? 0.0 : self.maxValue;
    }

    NSLog(@"value: %.2f gap: %.2f", proposedValue, tickDifference);

    self.lastSliderValue = proposedValue;
    return proposedValue;
}

- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index
{
    return NSZeroRect;
}

@end
点赞