改变NSProgressIndicator的颜色?

时间:2015-07-19 21:15:09

标签: objective-c macos cocoa nsprogressindicator

更改NSProgressIndicator颜色的最佳方法是,有一种更简单的方法,而不仅仅是将其子类化,然后自己绘制整个组件吗?

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

我试图谷歌这个,但所有的问题都已经过时了,并没有真正关注我正在研究的10.10 OS X版本。还检查了cocoa控件,并且只找到了1个用于过时的OS X版本的组件。

6 个答案:

答案 0 :(得分:11)

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

NSProgressIndicator

它在效果检查器中。在"内容过滤器"你可以添加" Hue Adjust"

enter image description here

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于Swift,方法名称为controlTint

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您可以使用proggressBar.appearance = NSAppearance(named.vibrantLight)//对于“黑色”指示符,它是浅色或鲜艳的黑色

答案 5 :(得分:0)

根据 Paxos 对 Interface builder 的回答,这是我能够以编程方式做到这一点的方式:

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>