在没有子类化的情况下以编程方式将NSBox的背景设置为渐变

时间:2008-11-11 18:40:16

标签: objective-c cocoa interface-builder

我想将NSBox的背景设置为渐变。在Interface Builder中,可以将NSBox的背景颜色设置为selectedMenuColor这是一个渐变。

NSBox只有setFillColor方法,那么Interface Builder如何用渐变填充它?

如何在不对其进行子类化的情况下以编程方式填充NSBox?继承NSBox是微不足道的,但Interface Builder的工作建议可能有更好的解决方案。

4 个答案:

答案 0 :(得分:2)

selectedMenuColor是一种“神奇”颜色,不会显示为纯色。系统中存在许多“神奇”颜色。

之前我曾使用colorWithPatternImage:。但请注意,用作图案的图像将会平铺,因此您可能需要将图像调整为框大小。

答案 1 :(得分:0)

你最接近的可能是使用用colorWithPatternImage:创建的NSColor,然后创建你想要的渐变作为图像并加载它。丑陋,但应该工作。我认为子类化是你最好的选择。

答案 2 :(得分:0)

selectedMenuColor颜色实际上是渐变的预渲染图像,而不是动态绘制的渐变,因此无法将任意渐变指定为背景颜色。就像Ben说的那样,子类化可能是要走的路。

答案 3 :(得分:0)

xib中,选择NSBox,然后转到效果检查器,检查核心动画层的NSBox。 现在

IBOutlet NSBox *box;

[box.setWantsLayer:YES];

[box.layer setBackgroundColor:[[NSColor whiteColor] CGColor]];

[box.setWantsLayer:YES];

[box.layer setBackgroundColor:[[NSColor colorWithPatternImage:[NSImage imageNamed:@"white.gif"]] CGColor]];