改变 NSProgressIndicator 的颜色?

Changing the color of NSProgressIndicator?

更改 NSProgressIndicator 颜色的最佳方法是什么,有没有比仅将其子类化然后自己绘制整个组件更简单的方法?

基本上我想要做的是拥有一个类似的组件,但能够改变条形的颜色。

我尝试 google 这个问题,但所有问题都已经过时了,与我正在研究的 10.10 OS X 版本无关。还检查了 cocoa 控件,只找到了 1 个过时的 OS X 版本的组件。

要更改 NSProgressIndicator 的颜色,请使用 setControlTint: 方法。如果你想设置自定义颜色,你必须手动绘制这样的控件。但是,您应该使用系统颜色来使这种控件在整个系统中保持一致。

您可以直接在 Interface Builder 中为此使用 Quartz 滤镜(例如色调调整)。这比预期的要好。

它在效果检查器中。在 "Content Filters" 下您可以添加 "Hue Adjust"

对于Swift,方法名称是controlTint

progressIndicator = NSProgressIndicator(frame: .......
progressIndicator.controlTint = .blueControlTint

使用 "CIFalseColor" 滤镜获得白色等。

let colorFilter = CIFilter(name: "CIFalseColor")!
colorFilter.setDefaults()
colorFilter.setValue(color1, forKey: "inputColor0")
colorFilter.setValue(color2, forKey: "inputColor1")
proggressBar?.contentFilters = [colorFilter]

你可以使用 proggressBar.appearance = NSAppearance(named: .vibrantLight) // 这是 "black" 指标

的亮色或暗色

根据 Paxos 对界面构建器的回答,我是这样以编程方式完成的:

let progress = NSProgressIndicator()
progress.contentFilters = [CIFilter(name: "CIHueAdjust", parameters: ["inputAngle": 4])!] 

这会使条变绿。我通过查看 Main.storyboard diff:

得到了这个
<progressIndicator maxValue="100" doubleValue="50" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="NIr-vo-obX">
  <rect key="frame" x="3" y="22" width="210" height="20"/>
+ <contentFilters>
+  <ciFilter name="CIHueAdjust">
+   <configuration>
+    <real key="inputAngle" value="4"/>
+    <null key="inputImage"/>
+   </configuration>
+  </ciFilter>
+ </contentFilters>
</progressIndicator>

我试图像大多数答案中那样更改 de Hue,但在获得我想要的正确特定颜色时遇到了很多问题。

对我有用并且似乎是获得特定颜色的最直接方法是使用 CIColorMonochrome 滤镜,您可以在其中设置您想要的任何 RGB 颜色:

let myCustomColor: CIColor(red: 10, green: 10, blue: 10)
if let colorMonochrome = CIFilter(name: "CIColorMonochrome", parameters: [kCIInputColorKey: myCustomColor]) {
    progressIndicator.contentFilters.append(colorMonochrome)
}