改变 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)
}
更改 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)
}