【问题标题】:colorWithAlphaComponent example in SwiftSwift 中的 colorWithAlphaComponent 示例
【发布时间】:2014-08-11 15:32:18
【问题描述】:

这个函数在 Swift 中的正确语法是什么?

以下工作正常,并将背景着色为紫色:

 self.view.backgroundColor = UIColor.purpleColor()

当我链接 colorWithAlphaComponent 函数时,视图会暂时显示正确的 alpha,然后变为相对较暗的不透明紫色:

 self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0.5)

这是为 UIColor 添加 alpha 值的推荐函数吗?

此外,为什么智能感知弹出窗口说这个函数需要一个 UIColor 作为参数?例如,

   self.view.backgroundColor = UIColor.colorWithAlphaComponent(<#UIColor#>)

编辑:行为很奇怪。我正在以模式加载的视图控制器上设置背景颜色。当模态从底部向上滑动时,alpha 是正确的。当模态加载完成后,背景颜色变为不透明?!

编辑 2:问题不在于代码——上面的代码和下面的建议都正确地应用了 alpha。问题在于模态的呈现方式——底层视图正在被删除。见:
Transparent Modal View on Navigation Controller

【问题讨论】:

  • 出于好奇,你试过UIColor(red: 0.5, green: 0, blue: 0.5, alpha: 0.5)吗?
  • 我刚试过;与使用 .colorWithAlphaComponent(0.5) 时的行为相同。见编辑。
  • 奇怪,colorWithAlphaComponent 是实例方法而不是类方法。如果这被定义为类方法,那么根据功能,它应该采用颜色和浮动作为参数。
  • 我同意...奇怪。那你也看到了吗?

标签: ios swift alpha uicolor


【解决方案1】:

这并不奇怪,它的行为完全符合其应有的行为。虽然 UIColor 的很多方法都是类方法,但还是有少数实例方法的,这就是其中之一。来自the UIColor documentation

colorWithAlphaComponent:

创建并返回一个颜色对象,该对象具有与接收器相同的颜色空间和分量值,但具有指定的 alpha 分量。

所以,colorWithAlphaComponent: 只是改变了它的接收者的 alpha 值。示例:

let purple = UIColor.purpleColor() // 1.0 alpha
let semi = purple.colorWithAlphaComponent(0.5) // 0.5 alpha

您在类型上看到此实例方法的自动完成的原因是因为 Swift 允许您将实例方法用作柯里化类型方法。在您提供的示例中,colorWithAlphaComponent 实际上返回一个以CGFloat 作为输入并返回UIColor 的函数。

let purple = UIColor.purpleColor()
let purpleFunc: (CGFloat -> UIColor) = UIColor.colorWithAlphaComponent(purple)

因此,如果您愿意,您可以调用传入要修改的实例的类型方法,然后使用您要应用的 alpha 调用生成的函数,就像这样。

let purple = UIColor.purpleColor()
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5)

那么,就您在使用模态视图控制器时遇到的问题而言,您不应该尝试更改模态视图控制器的视图的 alpha。 See this for more info。相反,您应该手动创建视图并将其添加到现有视图控制器的视图层次结构中(如果您绝对必须更改其 alpha)

【讨论】:

  • 谢谢。当模态出现时,我试图将背景“变灰”。也就是说,实际的模态内容在屏幕上只占了大约 300x200pt。我希望内容之外的区域“变灰”。当用户点击它时,它将关闭模式。
  • 在其他答案之一(下方)中,标识了一个设置:The easiest way is to use modalPresentationStyle property of navigationController
  • Swift 3 更新:不再是“colorWithAlphaComponent(_:)”。它现在只是“withAlphaComponent”...所以按照示例 Purple.withAlphaComponent(0.5)。
  • “所以,colorWithAlphaComponent: 只是改变了它的接收者的 alpha 值” 我不这么认为。它创建其接收器的副本,其 alpha 值已更改;我相信接收器本身的 alpha 没有改变。
  • Swift 3:color.withAlphaComponent(0.5)
【解决方案2】:

Swift 4.0

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)

【讨论】:

    【解决方案3】:

    在 Swift 3.0 中

    这适用于我在 xcode 8.2 中。

    yourView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

    它可能对你有帮助。

    【讨论】:

      【解决方案4】:

      尝试这样设置颜色

       view.backgroundColor = UIColor(red: (64/255.0), green: (54/255.0), blue: (105/255.0), alpha: 1.0)
      

      【讨论】:

        【解决方案5】:

        由于 UIColor 是 UIKit 的一部分,它已在 SwiftUI 中替换为 Color。等效方法为.opacity(_ opacity: Double) 例如:

        Color.purple.opacity(0.5)
        

        【讨论】:

          【解决方案6】:

          UIColor.black.withAlphaComponent(0.5).cgColor

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-01-18
            • 1970-01-01
            • 2017-12-07
            • 2016-02-29
            • 1970-01-01
            • 2015-10-27
            • 1970-01-01
            相关资源
            最近更新 更多