2017-07-26 81 views
1

this answer中所述,可以使用内容过滤器(在此特定情况下,“色调调整”内容过滤器)更改例如进度栏的颜色。以编程方式在Swift中设置内容过滤器3

看来你只能在Xcode的Interface Builder中实现这个功能;不过,我想以编程方式启用/禁用内容过滤器。因此,例如,我想启用色调调整内容过滤器,以便进度条变成绿色,稍后在函数中禁用它,以便返回蓝色。这可能吗?

+0

这个答案是MacOS和'NSView'文件。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html我尝试了几件事情 - 链接到QuartzCore和Quartz,添加一个nib文件,无论如何 - 对于iOS项目未找到“效果检查器”。对于它所做的macOS项目。但是,你应该能够(a)访问IB中的轨道色调,或者(b)完全按照代码而不是IB来执行。 – dfd

+0

嘿,对不起,如果我不清楚(我只是把它作为标签),但我* *实际上是在谈论macOS。但是,我可以尝试显示两个看起来不同的进度条,并隐藏其中一个或另一个。我不是一个很好的解决方案,但它会工作,据我所知 –

+0

使用Xcode 8.3我创建了一个非常简单的macOS项目(Cocoa应用程序),打开故事板,点击视图控制器和效果检查按钮(最后一个右)在那里。点击“过滤器”下拉菜单上的“+”按钮给了我很多选择,包括“色调调整”。那是你无法找到的东西吗? – dfd

回答

0

您可以使用进度视图的progressTintColor属性。

progressView.progressTintColor = .green 
+0

我得到错误“类型为'NSProgressIndicator'的值没有成员'progressTintColor' “ –

+0

对不起,我以为你正在使用progressView –

+0

没关系。我正在使用进度条指示器。 –

0

抢跑后,好像答案是真正简单:

// Need to set this in code. The settings in IB don't carry over when 
// I change the contentFilters 
progressIndicator.minValue = 0 
progressIndicator.maxValue = 100 
progressIndicator.doubleValue = 50 

let hueAdjust = CIFilter(name: "CIHueAdjust", withInputParameters: ["inputAngle": NSNumber(value: 1.7)])! 
progressIndicator.contentFilters = [hueAdjust] 
相关问题