【问题标题】:Setting the background of NSBox to a gradient programmatically without subclassing以编程方式将 NSBox 的背景设置为渐变而不进行子类化
【发布时间】:2008-11-11 18:40:16
【问题描述】:

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

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

如何以编程方式填充NSBox 而不对其进行子类化?继承 NSBox 是微不足道的,但 Interface Builder 的工作原理表明可能会有更好的解决方案。

【问题讨论】:

  • 2013年有什么消息吗?

标签: objective-c cocoa interface-builder


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        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]];
        

        【讨论】:

          猜你喜欢
          • 2014-10-25
          • 2012-06-03
          • 1970-01-01
          • 1970-01-01
          • 2016-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-13
          相关资源
          最近更新 更多