gpt4 book ai didi

objective-c - 如何自定义 NSSlider

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

我正在尝试在 Cocoa 中实现一个具有 5 个值的自定义 slider 。查看我的演示项目,可以在这里下载:http://s000.tinyupload.com/index.php?file_id=07311576247413689572 .

Custom Slider

我已经对NSSliderCell进行了子类化,并实现了诸如drawKnob:(NSRect)knobRectdrawBarInside:(NSRect)cellFrame Flipped:(BOOL)flipped<之类的方法 等等

我遇到一些问题:

  1. 我无法根据背景图像正确定位旋钮。我知道我能够更改旋钮的框架,并且我尝试进行一些计算以正确定位旋钮,但我无法使其适用于我的自定义 slider 。有人可以帮我解决这个问题吗?
  2. 我的自定义 slider 背景的高度是 41 像素。在 drawBarInside:(NSRect)cellFrame Flipped:(BOOL)flipped 中,我还将框架的高度更改为 41px,但整个背景不可见。为什么?
  3. 我注意到包含的图像(背景和旋钮)是垂直翻转的。为什么?请注意,与底部相比,边框顶部在背景中更暗,但当我绘制背景时,情况会相反。

最佳答案

  1. 我在计算旋钮矩形的 x 位置时发现了一个错误:您在应该使用宽度的地方使用了图像的高度。

  2. 单元格绘图被剪切到控件的框架中。也许您可以在细胞唤醒时扩展控制框架。

  3. 您需要使用 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];
}

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

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