gpt4 book ai didi

objective-c - NSSlider NSSliderCell 裁剪自定义旋钮

转载 作者:太空狗 更新时间:2023-10-30 03:53:43 25 4
gpt4 key购买 nike

我正在创建一个带有自定义 NSSliderCell 的自定义 NSSlider。除了旋钮之外,一切都运行良好。当我将它拖动到最大值时,旋钮被裁剪,我只能看到旋钮图像的 50%。

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

知道我做错了什么吗?只有当旋钮被裁剪到 50% 时, slider 才会达到最大值,因此它不会在不添加任何值的情况下移动。

- (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];

}

最佳答案

NSSLider 期望每个控件尺寸的旋钮图像有特殊尺寸:

NSRegularControlSize:   21x21
NSSmallControlSize: 15x15
NSMiniControlSize: 12x12

不幸的是,您的旋钮图像的高度不得超过此参数之一。但它的宽度可能会更长。如果是这样,您可以像这样计算旋钮的 x 位置:

CGFloat newOriginX = knobRect.origin.x *
(_barRect.size.width - (_knobImage.size.width - knobRect.size.width)) / _barRect.size.width;

其中 _barRect 是您的栏背景的 cellFrame 来自:

- (void)drawBarInside:(NSRect)cellFrame flipped:(BOOL)flipped;

我为自定义 NSSlider 创建了一个简单的解决方案。点击此链接 https://github.com/Doshipak/LADSlider

关于objective-c - NSSlider NSSliderCell 裁剪自定义旋钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com