【问题标题】:Programmatically set Content Filters in Swift 3在 Swift 3 中以编程方式设置内容过滤器
【发布时间】:2017-07-26 13:15:05
【问题描述】:

this answer 中所述,可以使用内容过滤器(在此特定情况下为“色调调整”内容过滤器)更改进度条的颜色等。

您似乎只能在 Xcode 的 Interface Builder 中实现这一点;但是,我想以编程方式启用/禁用内容过滤器。因此,例如,我想启用色调调整内容过滤器,以便进度条变为绿色,并稍后从函数中禁用它,以便恢复为蓝色。这可能吗?

【问题讨论】:

  • 该答案适用于 macOS 和 NSView 文件。 developer.apple.com/library/content/documentation/Cocoa/… 我尝试了几件事 - 链接到 QuartzCore 和 Quartz,添加一个 nib 文件,无论如何 - 对于 iOS 项目,Effects Inspector 没有找到。对于 macOS 项目,它确实如此。但是 - 您应该能够 (a) 访问 IB 中的轨道色调或 (b) 完全按照您希望在代码中而不是 IB 中执行的操作。
  • 嘿,对不起,如果我不清楚(我只是把它作为一个标签),但我 am 实际上是在谈论 macOS。但是,我可以尝试显示两个看起来不同的进度条,并隐藏一个或另一个。不是一个好的解决方案,但据我所知它会起作用
  • 使用 Xcode 8.3 我创建了一个非常简单的 macOS 项目(Cocoa 应用程序),打开故事板,单击视图控制器,效果检查器按钮(右侧最后一个)就在那里。单击“过滤器”下拉菜单上的“+”按钮给了我一系列可供选择的东西,包括“色调调整”。那是你找不到的吗?
  • 这确实是我想要的,但我希望能够以编程方式启用/禁用该色调。
  • 我几乎是一名 iOS 开发人员,但我实际上拒绝使用 IB! (老前辈,自 1984 年以来一直从事 IT 工作)。我发现你可以在 IB 中做的任何事情都应该可以在代码中做。我经常使用 CoreImage,我猜测在使用进度视图的 CALayer 和导入 QuartzCore 之间,您可能需要针对色调进行编码的工具。

标签: swift macos


【解决方案1】:

在一个错误的开始之后,答案似乎很简单:

// 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]

【讨论】:

  • 谢谢。这有帮助。只是想知道神奇的数字“1.7”是什么。我们如何确定特定颜色的值。
【解决方案2】:

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

progressView.progressTintColor = .green

【讨论】:

  • 我收到错误“'NSProgressIndicator' 类型的值没有成员'progressTintColor'”
  • 对不起,我以为你在使用 progressView
  • 没关系。我正在使用进度条指示器。
  • @SkeletonBow 我不知道该怎么做
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2018-12-27
  • 2017-07-28
  • 2023-03-10
  • 2017-11-22
  • 1970-01-01
  • 2019-10-06
相关资源
最近更新 更多