gpt4 book ai didi

objective-c - NSSlider自定义旋钮图片

转载 作者:行者123 更新时间:2023-12-03 16:41:31 24 4
gpt4 key购买 nike

我尝试在互联网上搜索好的技巧,为 NSSlider 的旋钮绘制不同尺寸的自定义图像。

我希望这次我们能够将想法集中到一个地方。

大多数人遇到的问题是他们想要一个不同尺寸的旋钮,有时一个更大的旋钮无法工作,除非你覆盖 sizetofit 据我所知。

我自己没有解决方案并搜索了同样的东西。

我的问题(以及整个问题)是,我的旋钮有一个 22x30px 的图像。

我有一个子类 NSSliderCell,其中drawKnob: 方法是:

- (void)drawKnob:(NSRect)knobRect {

NSImage *image = [NSImage imageNamed:@"sliderImage"];

[[NSColor colorWithPatternImage:image] set];
NSRectFill(knobRect);
}

它正在用我的图像填充旧旋钮。然后将 RectFill 更改为:

NSRectFill(NSMakeRect(knobRect.origin.x,knobRect.origin.y,25,35));

25/35 只是为了获得更大的值。

但是尺寸不会改变宽度(在我的例子中它是一个垂直 slider )并且图像不是从真正的角落开始。它位于旋钮的中间,左侧的一部分被切掉,右侧的一部分被加倍。

初始化 NSSlider 时,框架足够大以容纳图像,但无法正常显示。

我尝试了 NSSlider 的子类,其中使用了 -(void)sizeToFit {},但我真的不知道在那里设置什么。

我希望我们可以在这里发布一个带有自定义旋钮图像的 NSSlider 示例代码,每个人都可以使用,而不必花 2-3 小时在 google 上搜索。

我确信有人用自定义图像制作了 slider

谢谢

最佳答案

在您的 NSSliderCell 子类中,您还需要重写 knobRectFlipped:。这是我的一些代码,其中 mNormalKnob 是加载到 initWithCoder: 中的成员变量中的 NSImage

- (NSRect)knobRectFlipped:(BOOL)flipped
{
NSSlider* theSlider = (NSSlider*) [self controlView];
NSRect myBounds = [theSlider bounds];
NSSize knobSize = [mNormalKnob size];
float travelLength = myBounds.size.width - knobSize.width;
double valueFrac = ([theSlider doubleValue] - [theSlider minValue]) /
([theSlider maxValue] - [theSlider minValue]);
float knobLeft = roundf( valueFrac * travelLength );
float knobMinY = roundf( myBounds.origin.y +
0.5f * (myBounds.size.height - knobSize.height) );
NSRect knobRect = NSMakeRect( knobLeft, knobMinY,
knobSize.width, knobSize.height );
return knobRect;
}

我想我假设旋钮图像的高度不超过 View 框架的高度。

这是另一种方法,应该可以在不考虑 View 框架高度的情况下工作,尽管我还没有尝试过。将 slider 及其 super View 指定为具有核心动画层。创建一个 CALayer 作为子类的成员变量,并将其内容设置为旋钮图像。然后当需要绘制旋钮时,只需调整旋钮图层的位置即可。

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

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