如何使用透明中间条和自定义旋钮大小创建自定义NSSlider

时间:2013-01-15 22:20:22

标签: objective-c macos cocoa nsslider

我在NSSliderCell上搜索了一些代码,但我找不到办法去做我正在寻找的东西。
我想创建这样的东西(白线是滑块旋钮,1像素宽度):
enter image description here

我将在音乐曲目的时间栏中使用它,所以它会每秒移动一次(这就是为什么我想使用NSSlider让事情变得容易)。
制作带有透明中间条的滑块我需要做什么,类似于上图?

PS:它不会被触摸,只是为了展示。

3 个答案:

答案 0 :(得分:0)

您可以覆盖drawRect:,就像在子类化NSView时一样,除了在您的实现中,使用[self doubleValue]来确定绘制线的位置。但是,在这种情况下,我没有看到子类NSSlider的重点。自定义NSView可以具有确定绘制线的位置的属性,然后其他代码可以设置该属性或绑定到该属性。

答案 1 :(得分:0)

对于我来说,这看起来像一个垂直的分割视图,带有1像素宽的分隔线。你可以尝试一下。有一种方法可以设置分隔线的位置,因此可以根据需要轻松移动。并且您可以通过创建NSSplitview的子类并覆盖dividerThickness方法返回1来使分隔符成为1像素。然后,您只需将2个子视图的背景设置为黑色即可。这很容易尝试,也许它会对你有用。祝你好运。

答案 2 :(得分:0)

我终于明白了:

  • 我创建了一个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方法不会被调用。