9

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

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

我试图用谷歌搜索,但所有的问题都已经过时了,并且并不真正关心我正在开发的 10.10 OS X 版本。还检查了可可控件,只发现了 1 个用于过时 OS X 版本的组件。

4

6 回答 6

16

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

NSProgressIndicator

它在效果检查器中。在“内容过滤器”下,您可以添加“色调调整”

在此处输入图像描述

于 2015-07-20T22:26:43.143 回答
0

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

于 2015-07-19T21:25:03.973 回答
0

对于 Swift,方法名称是controlTint.

progressIndicator = NSProgressIndicator(frame: .......
progressIndicator.controlTint = .blueControlTint
于 2018-05-23T11:53:26.033 回答
0

使用“CIFalseColor”过滤器获得白色等。

let colorFilter = CIFilter(name: "CIFalseColor")!
colorFilter.setDefaults()
colorFilter.setValue(color1, forKey: "inputColor0")
colorFilter.setValue(color2, forKey: "inputColor1")
proggressBar?.contentFilters = [colorFilter]
于 2018-09-22T11:10:50.920 回答
0

您可以使用 proggressBar.appearance = NSAppearance(named: .vibrantLight) // 这是“黑色”指标的浅色或充满活力的深色

于 2020-03-09T13:48:17.040 回答
0

根据 Paxos 对 Interface builder 的回答,这就是我能够以编程方式执行此操作的方式:

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

这将使栏变成绿色。我通过查看 Main.storyboard 差异得到了这个:

<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>
于 2021-08-04T15:10:16.513 回答