Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为NSProgressIndicator颜色设置IB内容过滤器_Swift_Nsprogressindicator - Fatal编程技术网

Swift 为NSProgressIndicator颜色设置IB内容过滤器

Swift 为NSProgressIndicator颜色设置IB内容过滤器,swift,nsprogressindicator,Swift,Nsprogressindicator,我在这里搜索了Google、Apple Documentation、gitHub等,但找不到任何关于如何使用内容过滤器设置NSProgressIndicator颜色的信息。我想在macOS上做这个 我读到过关于以编程方式修改NSProgressIndicator的文章 但是,我在IB中的NSProgressIndicator上设置了一个内容过滤器,即假颜色。它有两种颜色,颜色1和颜色2。我将颜色1设置为绿色,将颜色2设置为红色 通过将内容过滤器False Color Color 1设置为自定义绿

我在这里搜索了Google、Apple Documentation、gitHub等,但找不到任何关于如何使用内容过滤器设置NSProgressIndicator颜色的信息。我想在macOS上做这个

我读到过关于以编程方式修改NSProgressIndicator的文章

但是,我在IB中的NSProgressIndicator上设置了一个内容过滤器,即假颜色。它有两种颜色,颜色1和颜色2。我将颜色1设置为绿色,将颜色2设置为红色

通过将内容过滤器False Color Color 1设置为自定义绿色,我的NSPROGRESS指示器现在默认为绿色。所以,这告诉我它正在从我的内容过滤器中提取颜色,颜色1,但我不知道它是如何做到的

如何以编程方式将NSProgressIndicator的颜色设置为内容过滤器颜色2

我会发布代码说明我是如何做到这一点的,但我甚至不知道如何开始

另一篇帖子提到了设置.appearance,但这让我想到了,这似乎不是我想要的。我很愿意做我的家庭作业并解决这个问题,但我将空手而归,使用IB中设置的内容过滤器

编辑1:进一步调查后,如果执行打印(progressBar.contentFilters),我可以看到IB的内容过滤器中设置的两种颜色,即假颜色设置。这是打印输出:

[<CIFalseColor: 0x6000026039c0>
inputImage=nil
inputColor0=<CIColor 0x600000cc4570 (0 0.976805 0 1) devicergb>
inputColor1=<CIColor 0x600000cc45d0 (1 0.149131 0 1) devicergb>
]
然后在viewDidLoad中:

// Set the values for the filters
darkGreenFilter.setValue(darkGreenCIColor, forKey: "inputColor0")
redFilter.setValue(redCIColor, forKey: "inputColor0")
// Set the progress indicator to dark green
progressBar.contentFilters = [darkGreenFilter]
// Set the progress to zero (removes the colored bar)
progressBar.doubleValue = 0
然后在后面的方法中监视progressBar的状态

if progressBar.doubleValue > 0.75 && !progressBarColorChanged {
    progressBar.contentFilters = [redFilter]
    progressBarColorChanged = true
}
然后,一旦执行完成,我使用重置方法将其全部放回原处

progressBar.contentFilter = [darkGreen]
progressBar.doubleValue = 0
progressBarColorChanged = false

我正在慢慢地到达那里。有人对如何做得更好,或者我如何消除讨厌的屏幕闪烁有什么建议吗?

我找到了闪烁的来源。在我的测试中,在设置redFilter
progressBar.contentFilter=[]之前,我有一行代码;progressBar.contentFilter=[redFilter]
然后再次将progressBar重置为暗绿色过滤器时
progressBar.contentFilter=[];progressBar.contentFilter=[darkGreenFilter]
删除这些行后,闪烁消失。对我来说太好了!
progressBar.contentFilter = [darkGreen]
progressBar.doubleValue = 0
progressBarColorChanged = false