我需要子类NSSliderCell来定制它的外观。 我对酒吧没有任何问题,我覆盖了
- (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped
它按预期工作。
- (void)drawKnob:(NSRect)knobRect
同样适用,但我想要一个较小的旋钮,并且调整NSRect的大小不是一个选项,因为我在右侧或左侧有一个不需要的空间(或两者,如果我居中我的自定义旋钮)。
阅读documentation,我应该覆盖
- (void)drawKnob
计算应该绘制旋钮的矩形,然后调用drawKnob: 问题是,试图让cellSize计算我应该在哪里绘制旋钮,我得到一个荒谬的宽度:40000
如何获得合适的宽度? NSSliderCell是NSCell的子类,因此我无法访问帧/边界。
答案 0 :(得分:3)
我实际设法自定义NSSlider旋钮外观,为NSSliderCell添加width
属性并覆盖
- (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
是自解释宏)。