我试着在互联网上搜索好的提示,为NSSlider的旋钮绘制一个不同大小的自定义图像。
我希望我们这次能把这些想法集中在一个地方。
大多数人遇到的问题是,他们想要一个不同大小的旋钮,有时更大的旋钮无法工作,除非你超过我所能读到的尺寸。
我自己也没有解决办法,我也在寻找同样的东西。
我的问题(以及整个问题)是,我有一个图像为我的旋钮,是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只是为了得到更大的价值。
但是大小不会改变宽度(在我的例子中,它是一个垂直滑块),并且图像不是从一个真正的角落开始的。它被放置在旋钮的中间,左侧的一部分被切断,右侧则被冲洗。
初始化NSSlider时,帧足够大,可以容纳图像,但不一定会显示。
我尝试了一个NSSlider子类,在其中我使用了-(void)sizeToFit {},但是我不知道在其中设置什么。
我希望我们可以在这里张贴一个NSSlider的示例代码与自定义旋钮图像,每个人都可以使用,而不必谷歌2-3个小时。
我认为有人用定制的图像做了滑翔机
谢谢
发布于 2013-10-19 16:18:16
在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;
}我想我假设旋钮图像的高度不超过视图帧的高度。
这是另一种不考虑视图帧高的方法,尽管我还没有尝试过。指定滑块及其超级视图具有核心动画层。将CALayer作为子类的成员变量,并将其内容设置为旋钮图像。然后,当是时候画旋钮时,只要调整旋钮层的位置。
https://stackoverflow.com/questions/19466392
复制相似问题