1

我需要继承 NSSliderCell 来自定义它的外观。我对酒吧没有任何问题,我超越了

- (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped

它按预期工作。

- (void)drawKnob:(NSRect)knobRect

也可以,但我想要一个更小的旋钮,并且调整 NSRect 的大小不是一个选项,因为我在右侧或左侧(或两者都有,如果我将自定义旋钮居中)有一个不需要的空间。

阅读文档,我应该重写

- (void)drawKnob

计算应该在其中绘制旋钮的矩形,然后调用 drawKnob:问题是,试图让 cellSize 计算我应该在哪里绘制旋钮,我得到一个荒谬的宽度:40000

我怎样才能得到正确的宽度?NSSliderCell 是 NSCell 的子类,因此我无法访问框架/边界。

4

1 回答 1

3

我实际上设法自定义 NSSlider 旋钮外观,向widthNSSliderCell 添加一个属性并以 - (NSRect)knobRectFlipped:(BOOL)flipped这种方式覆盖:

- (NSRect)knobRectFlipped:(BOOL)flipped {
CGFloat knobCenterPosition = roundf(size.width * self.floatValue / self.maxValue);
// knob should always be entirely visible
knobCenterPosition = MIN(MAX(knobCenterPosition, roundf(KNOB_WIDTH / 2) + KNOB_INSET), size.width - (roundf(KNOB_WIDTH / 2) + KNOB_INSET));
return  NSMakeRect(knobCenterPosition - roundf(KNOB_WIDTH / 2), 0, KNOB_WIDTH, self.cellSize.height);

}

我需要更改knobCenterPosition旋钮何时与滑块的右边界或左边界重叠(KNOB_WIDTH并且KNOB_INSET是自我解释的宏)。

于 2014-01-02T09:49:32.673 回答