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