我正在尝试使用5个值在Cocoa中实现自定义滑块。请参阅我的演示项目,可在此处下载:http://s000.tinyupload.com/index.php?file_id=07311576247413689572。
我已经将 NSSliderCell 子类化,并实现了drawKnob:(NSRect)knobRect
和drawBarInside:(NSRect)cellFrame flipped:(BOOL)flipped
等方法。
我正面临一些问题:
drawBarInside:(NSRect)cellFrame flipped:(BOOL)flipped
我也将帧的高度更改为41px,但整个背景都不可见。为什么?答案 0 :(得分:2)
我在计算旋钮矩形的x位置时发现了一个错误:你使用了你应该使用宽度的图像高度。
正在将单元格绘图剪切到控件的框架。也许你可以在你的手机醒来时扩展控制框架。
您需要使用NSImage方法drawInRect:fromRect:operation:fraction:respectFlipped:hints:
,并为respectFlipped:
参数传递YES。 Apple的控件通常使用翻转坐标。
已添加:在awakeFromNib
中展开框架似乎不起作用,框架会被撤回。这是有效的。不要覆盖drawBarInside:flipped:
,而是添加此覆盖:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSRect controlFrame = [controlView frame];
float bgHeight = self.backgroundImage.size.height;
if (controlFrame.size.height < bgHeight)
{
controlFrame.size.height = bgHeight;
[controlView setFrame: controlFrame];
}
[self.backgroundImage
drawInRect: [controlView bounds]
fromRect: NSZeroRect
operation: NSCompositeSourceOver
fraction: 1.0
respectFlipped: YES
hints: NULL];
[self drawKnob];
}