具有非线性比例的 NSSlider

NSSlider with non-linear scale

我正在尝试使 NSSlider 的 values/digits 非线性...

@IBOutlet private weak var _countSlider:NSSlider!;

let countSliderValues:[Int] = [1, 20, 50, 100, 500, 1000];
_countSlider.numberOfTickMarks = countSliderValues.count;
_countSlider.minValue = Double(countSliderValues[0]);
_countSlider.maxValue = Double(countSliderValues[countSliderValues.count - 1]);
_countSlider.allowsTickMarkValuesOnly = true;
_countSlider.integerValue = 100;

但由于某种原因,滑块显示线性值(1、200、400、600、800、1000)。有谁知道为什么会这样?

刻度线的数量 属性 设置在滑块的最小值和最大值之间平均分配的刻度线。无法为每个单独的刻度线定义目标值。

你最好的选择是通过子类化 NSSliderNSSliderCell 并强制它们按照你想要的方式运行,或者从头开始创建你自己的全新控件,具体到非线性缩放。没什么说你仍然不能使用 NSSliderCell 来绘制标准系统部件(轨道和旋钮)。