我已经搜索了一些代码,NSSliderCell
但我找不到一种方法来做我正在寻找的东西。
我想创建这样的东西(白线是滑块旋钮,1像素宽度):
我将把它用于音乐曲目的时间栏,所以它会每秒移动一次(这就是为什么我想使用 aNSSlider
来让事情变得简单)。
我需要做什么才能制作一个带有透明中间条的滑块,类似于上图?
PS:它不会是可触摸的,它只是为了展示。
我已经搜索了一些代码,NSSliderCell
但我找不到一种方法来做我正在寻找的东西。
我想创建这样的东西(白线是滑块旋钮,1像素宽度):
我将把它用于音乐曲目的时间栏,所以它会每秒移动一次(这就是为什么我想使用 aNSSlider
来让事情变得简单)。
我需要做什么才能制作一个带有透明中间条的滑块,类似于上图?
PS:它不会是可触摸的,它只是为了展示。
您可以只是 override drawRect:
,就像子类化时一样NSView
,除了在您的实现中,用于[self doubleValue]
确定在哪里画线。NSSlider
但是,在这种情况下,我看不到子类化的意义。自定义NSView
可以有一个属性来确定在哪里画线,然后其他代码可以设置该属性或绑定到它。
对我来说,这看起来像是一个带有 1 像素宽分隔线的垂直拆分视图。你可以试试。有一种方法可以设置分隔线的位置,因此可以根据需要轻松移动。您可以通过创建 NSSplitview 的子类并覆盖 dividerThickness 方法以返回 1 来使分隔符变为 1 像素。然后您只需将 2 个子视图的背景设置为黑色即可。这很容易尝试,所以也许它对你有用。祝你好运。
我终于明白了:
NSSliderCell
带有属性的子类@property float x
;drawKnob
方法,并在其中写道:-(void)drawKnob:(NSRect)knobRect{ self.x =knobRect.origin.x; }
NSSlider
拖到我的窗口中(使其变小,将其宽度更改为窗口的宽度)并将其单元格类更改为我创建的那个;[_timeBarSlider setMinValue:0]; [_timeBarSlider setMaxValue:myTrack.duration]; [_timeBarSlider setDoubleValue:myPlayer.currentPosition]; [[_timeBarImageView animator] setFrame:NSMakeRect(_timeBarSliderCell.x, yourYCoordinate, yourWidth, yourHeight)];
_timerBarSlider
是我在 IB 中的 NSSlider /_timerBarImageView
是包含垂直图像线的图像视图 /_timerBarSlderCell
是 NSSlider 的单元格(子类)
PS:NSSlider 在该窗口中的每个对象后面,因此用户看不到它。您不能setHidden:YES
使用它,因为drawKnob
不会调用该方法。