【发布时间】:2022-01-03 10:32:52
【问题描述】:
我只是想知道如何更改我拥有的资产颜色的不透明度 (alpha)。当我尝试这个UIColor(named: "something", alpha: 0.4) 时,Xcode 抱怨:Extra argument 'alpha' in call。
有什么方法可以通过编程方式修改资产颜色的不透明度?
【问题讨论】:
我只是想知道如何更改我拥有的资产颜色的不透明度 (alpha)。当我尝试这个UIColor(named: "something", alpha: 0.4) 时,Xcode 抱怨:Extra argument 'alpha' in call。
有什么方法可以通过编程方式修改资产颜色的不透明度?
【问题讨论】:
UIColor,正如 Jasur S. 所提到的,拥有withAlphaComponent(_:)。
它可以与任何UIColor对象一起使用来修改它的alpha:
let color = UIColor(named: "something")?.withAlphaComponent(0.5)
创建自定义扩展来覆盖现有功能是一个值得商榷的好处。
【讨论】:
您可以在分配颜色时设置颜色 alpha 分量,如下所示:
button.backgroundColor = .black.withAlphaComponent(0.5)
【讨论】:
你可以为UIColor添加这个扩展并且易于使用。
extension UIColor {
convenience init?(named: String, alpha: CGFloat) {
if let rgbComponents = UIColor(named: named)?.cgColor.components {
self.init(red: rgbComponents[0], green: rgbComponents[1], blue: rgbComponents[2], alpha: alpha)
} else {
self.init(named: named)
}
}
}
用法:
let colorWithAlpha = UIColor(named: "Assets Color", alpha: 0.5)
【讨论】:
使用此扩展从 UIColor 中获取 rgb 值
extension UIColor {
var rgba: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return (red, green, blue, alpha)
}
}
然后你可以创建一个新的颜色
let assetColor = UIColor(named: "something")
let (r,g,b,_) = assetColor.rgba
let newColor = UIColor(red:r, green:g, blue:b, alpha: 0.4)
【讨论】: