Swift中的colorWithAlphaComponent示例

kmi*_*las 35 alpha uicolor ios swift

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

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

 self.view.backgroundColor = UIColor.purpleColor()
Run Code Online (Sandbox Code Playgroud)

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

 self.view.backgroundColor = UIColor.purpleColor().colorWithAlphaComponent(0.5)
Run Code Online (Sandbox Code Playgroud)

这是向UIColor添加alpha值的推荐功能吗?

此外,为什么intellisense popup说这个函数需要UIColor作为参数?例如,

   self.view.backgroundColor = UIColor.colorWithAlphaComponent(<#UIColor#>)
Run Code Online (Sandbox Code Playgroud)

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

编辑2:问题不在于代码 - 上面的代码和下面的建议都正确地应用了alpha.问题在于呈现模态的方式 - 基础视图正在被删除.请参阅:
导航控制器上的透明模态视图

Mic*_*lum 71

这并不奇怪,它的行为完全符合它的要求.虽然许多UIColor的方法都是类方法,但仍然有一些实例方法,这就是其中之一.来自UIColor文档.

colorWithAlphaComponent:

创建并返回与接收器具有相同颜色空间和组件值但具有指定alpha分量的颜色对象.

因此,colorWithAlphaComponent:只是更改其接收器的alpha值.例:

let purple = UIColor.purpleColor() // 1.0 alpha
let semi = purple.colorWithAlphaComponent(0.5) // 0.5 alpha
Run Code Online (Sandbox Code Playgroud)

而且你在类型上看到这个实例方法的自动完成的原因是因为Swift允许你使用实例方法作为curried类型方法.在您提供的示例中,colorWithAlphaComponent实际上返回一个函数,该函数接受一个CGFloat输入并返回一个UIColor.

let purple = UIColor.purpleColor()
let purpleFunc: (CGFloat -> UIColor) = UIColor.colorWithAlphaComponent(purple)
Run Code Online (Sandbox Code Playgroud)

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

let purple = UIColor.purpleColor()
let purpleTrans = UIColor.colorWithAlphaComponent(purple)(0.5)
Run Code Online (Sandbox Code Playgroud)

然后,就模态视图控制器所遇到的问题而言,您不应该尝试更改模态视图控制器的视图的alpha.更多信息请参阅本.相反,您应该手动创建视图并将其添加到现有视图控制器的视图层次结构中(如果您必须更改其alpha)


Arj*_*dav 30

Swift 4.0

self.view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
Run Code Online (Sandbox Code Playgroud)


JoG*_*oFo 7

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

Color.purple.opacity(0.5)
Run Code Online (Sandbox Code Playgroud)


Ash*_*shu 5

在Swift 3.0中

这在xcode 8.2中对我有效。

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

它可能会帮助您。