Objective c NSSliderCell:绘制自定义旋钮的子类

Objective c NSSliderCell:绘制自定义旋钮的子类,objective-c,cocoa,nscell,nsslider,Objective C,Cocoa,Nscell,Nsslider,我需要子类NSSliderCell来定制它的外观。 我对吧台没意见,我控制过度了 - (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped 它的工作原理与预期一致 - (void)drawKnob:(NSRect)knobRect 也可以工作,但我想要一个更小的旋钮,而调整NSRect的大小不是一个选项,因为我在右侧或左侧都有不需要的空间(如果我将自定义旋钮居中,则两者都有) 读这本书,我应该重写 - (void)drawKnob

我需要子类NSSliderCell来定制它的外观。 我对吧台没意见,我控制过度了

- (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped
它的工作原理与预期一致

- (void)drawKnob:(NSRect)knobRect
也可以工作,但我想要一个更小的旋钮,而调整NSRect的大小不是一个选项,因为我在右侧或左侧都有不需要的空间(如果我将自定义旋钮居中,则两者都有)

读这本书,我应该重写

- (void)drawKnob
要计算应绘制旋钮的矩形,请调用drawKnob: 问题是,为了计算我应该在哪里画旋钮,我得到了一个荒谬的宽度:40000


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

我实际上成功地定制了NSSlider旋钮的外观,为NSSliderCell添加了一个
宽度
属性并覆盖了
-(NSRect)knobretflipped:(BOOL)按此方式翻转

- (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);
}


当旋钮与滑块的左右边框重叠时,我需要更改旋钮中心位置(
knob\u WIDTH
knob\u INSET
是自我解释的宏)。

尝试覆盖
-knobThickness
。我不记得这是否必要。谢谢你@Wevah,它起作用了!那么,我将把它作为一个答案添加进去@Wevah,设置knobThickness不起作用,knobRect总是返回相同的宽度,不管我从-knobThickness方法返回什么。实际上,我解决了向NSSliderCell添加一个width属性并覆盖-(NSRect)Knobretflipped:(BOOL)Flipped是的,这似乎更正确。哎呀@雷内读完后,我决定发布一个答案。我错了吗?我不清楚这是一个真实的答案还是对你的问题的一个新的更新。如果这是一个非常好的答案。