首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSlider自定义旋钮图像

NSSlider自定义旋钮图像
EN

Stack Overflow用户
提问于 2013-10-19 13:12:08
回答 1查看 3.2K关注 0票数 2

我试着在互联网上搜索好的提示,为NSSlider的旋钮绘制一个不同大小的自定义图像。

我希望我们这次能把这些想法集中在一个地方。

大多数人遇到的问题是,他们想要一个不同大小的旋钮,有时更大的旋钮无法工作,除非你超过我所能读到的尺寸。

我自己也没有解决办法,我也在寻找同样的东西。

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

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

代码语言:javascript
复制
- (void)drawKnob:(NSRect)knobRect {

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

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

用我的形象填充旧的旋钮。然后将RectFill更改为:

代码语言:javascript
复制
NSRectFill(NSMakeRect(knobRect.origin.x,knobRect.origin.y,25,35));

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

但是大小不会改变宽度(在我的例子中,它是一个垂直滑块),并且图像不是从一个真正的角落开始的。它被放置在旋钮的中间,左侧的一部分被切断,右侧则被冲洗。

初始化NSSlider时,帧足够大,可以容纳图像,但不一定会显示。

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

我希望我们可以在这里张贴一个NSSlider的示例代码与自定义旋钮图像,每个人都可以使用,而不必谷歌2-3个小时。

我认为有人用定制的图像做了滑翔机

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-19 16:18:16

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

代码语言:javascript
复制
- (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;
}

我想我假设旋钮图像的高度不超过视图帧的高度。

这是另一种不考虑视图帧高的方法,尽管我还没有尝试过。指定滑块及其超级视图具有核心动画层。将CALayer作为子类的成员变量,并将其内容设置为旋钮图像。然后,当是时候画旋钮时,只要调整旋钮层的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19466392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档