0

我已经搜索了一些代码,NSSliderCell但我找不到一种方法来做我正在寻找的东西。
我想创建这样的东西(白线是滑块旋钮,1像素宽度):
在此处输入图像描述

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

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

4

3 回答 3

0

您可以只是 override drawRect:,就像子类化时一样NSView,除了在您的实现中,用于[self doubleValue]确定在哪里画线。NSSlider但是,在这种情况下,我看不到子类化的意义。自定义NSView可以有一个属性来确定在哪里画线,然后其他代码可以设置该属性或绑定到它。

于 2013-01-16T03:15:31.890 回答
0

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

于 2013-01-16T04:16:43.633 回答
0

我终于明白了:

  • 我创建了一个NSSliderCell带有属性的子类@property float x
  • 我覆盖了该drawKnob方法,并在其中写道:

-(void)drawKnob:(NSRect)knobRect{ self.x =knobRect.origin.x; }

  • 我将 aNSSlider拖到我的窗口中(使其变小,将其宽度更改为窗口的宽度)并将其单元格类更改为我创建的那个;
  • 然后当音乐播放时,每过一秒我都会这样做:
[_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不会调用该方法。

于 2013-01-17T19:40:11.170 回答