- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建一个带有自定义 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/
我实现了一个自定义 NSSliderCell,它使用的旋钮大小与默认旋钮非常不同(这是为了交互式展览 - 我无法使用任何默认的 Mac OS X 控件)。 虽然 slider 出现并且行为正确(旋钮从
我已经完成了一个自定义 slider 单元格的实现,该单元格可以使用滚动条和旋钮的图像进行绘制。现在唯一的障碍是,当我快速拖动旋钮时,图像会变得困惑。我已经发布了一个屏幕截图。 代码如下: #impo
我想创建一个具有三个旋钮的 NSSlider,而不是只有一个。我想我可以对 NSSliderCell 进行子类化,然后重写跟踪方法,以确保一个 slider 单元不会超过它旁边的一个。 这很容易做到,
我正在创建一个带有自定义 NSSliderCell 的自定义 NSSlider。除了旋钮之外,一切都运行良好。当我将它拖动到最大值时,旋钮被裁剪,我只能看到旋钮图像的 50%。 在分配我的自定义 NS
我有一个绘制图形的绘制矩形显示器,我正在尝试使用 slider 更改参数。在 Objective-C 中,我将使用 slider 操作并包含 [self display] 来更新显示。这是 Swift
我需要子类化 NSSliderCell 来自定义其外观。我对酒吧没有任何问题,我超越了 - (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flippe
我是一名优秀的程序员,十分优秀!