NSSlider NSSliderCell剪辑自定义旋钮

moo*_*ots 5 cocoa objective-c nsslider

我正在使用自定义NSSliderCell创建自定义NSSlider。除了旋钮之外,其他所有部件的工作都非常漂亮。当我将其拖动到最大值时,旋钮被修剪,我只能看到旋钮图像的50%。

当分配我的自定义NSSliderCell时,我将toggleThickness设置为用作旋钮的图像的宽度。我以为(我猜错了)我会考虑到这一点并阻止它裁剪?

有什么想法我做错了吗?仅当将旋钮裁剪为50%时,滑块才达到maxValue,因此在不添加任何值的情况下不会滑动。

- (void)drawKnob:(NSRect)knobRect {
 NSImage * knob = _knobOff;
 knobRectVar = knobRect;

 [[self controlView] lockFocus];
 [knob
  compositeToPoint:
  NSMakePoint(knobRect.origin.x+4,knobRect.origin.y+knobRect.size.height+20)
  operation:NSCompositeSourceOver];
 [[self controlView] unlockFocus];
}

- (void)drawBarInside:(NSRect)rect flipped:(BOOL)flipped {
 rect.size.height = 8;

 [[self controlView] lockFocus];
 NSImage *leftCurve = [NSImage imageNamed:@"customSliderLeft"];
 [leftCurve drawInRect:NSMakeRect(5, 25, 8, 8) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];

    NSRect leftRect = rect;
    leftRect.origin.x=13;
    leftRect.origin.y=25;
    leftRect.size.width = knobRectVar.origin.x + (knobRectVar.size.width/2);
    [leftBarImage setSize:leftRect.size];
    [leftBarImage drawInRect:leftRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction:1];
 [[self controlView] unlockFocus];

}
Run Code Online (Sandbox Code Playgroud)

Set*_*ley -2

您不需要从单元格绘制方法内部锁定和解锁 controlView 的焦点。这些方法仅由 controlView\xe2\x80\x99s -drawRect: 方法调用,该方法在 view\xe2\x80\x99s 焦点锁定的情况下调用。

\n\n

为什么要在 -drawKnob 中合成旋钮图像的 Y 坐标上添加 20 个点?

\n