我通常会在iOS上使用自定义UIColors,并使用Swift扩展,但是现在使用iOS 11 / Xcode 9,我们可以创建颜色集。我们如何使用它们?
更新-提示
正如@Cœur所说,我们可以拖放颜色,并像UIColor对象一样使用它,可能的解决方案是将其用作扩展:
或作为常量:
现在,我想知道是否可以像访问资产图像的UIImage访问一样访问它们,例如:
UIImage(named: "image-name") -> UIColor(named: "color-name")
Answers:
(问题更新的简短答案:UIColor(named: "MyColor")
Xcode 9.0中有)
回答原始问题:
在查看源代码时,它将转换为颜色文字:
#colorLiteral(red: 0, green: 0.6378085017, blue: 0.8846047521, alpha: 1)
您注意到红色,绿色和蓝色的值有何不同?这是因为我使用Color Space定义了它们Display P3
,但是colorLiteral使用的是Color Space sRGB
。
UIColor(named:)
,它是UIKit的一部分,UIKit是从iOS 11开始内置于iOS的。它可能看起来很微妙,但很重要。Xcode无法将方法添加到UIKit。
将颜色集添加到资产目录中,命名该颜色,然后在属性检查器中设置颜色,然后使用在代码中调用它UIColor(named: "MyColor")
。
在资产目录查看器中,单击主面板右下方的加号按钮,然后选择“新建颜色集”
单击白色正方形,然后选择“属性”检查器(右窗格中最右边的图标)
在这里,您可以命名并选择颜色。
要在您的代码中使用它,请使用调用它UIColor(named: "MyColor")
。这将返回一个可选内容,因此在大多数情况下,您需要将其拆开(鉴于您知道资产目录中存在颜色,这可能是少数可以接受强制拆开的情况之一)。
您需要使用UIColor(named: "appBlue")
。
您可以在UIColor扩展中创建一个函数以进行简单访问。
enum AssetsColor {
case yellow
case black
case blue
case gray
case green
case lightGray
case separatorColor
case red
}
extension UIColor {
static func appColor(_ name: AssetsColor) -> UIColor? {
switch name {
case .yellow:
return UIColor(named: "appYellow")
case .black:
return UIColor(named: "appBlack")
case .blue:
return UIColor(named: "appBlue")
case .gray:
return UIColor(named: "appGray")
case .lightGray:
return UIColor(named: "appLightGray")
case .red:
return UIColor(named: "appRed")
case .separatorColor:
return UIColor(named: "appSeparatorColor")
case .green:
return UIColor(named: "appGreen")
}
}
}
您可以像这样使用它:
userNameTextField.textColor = UIColor.appColor(.gray)
enum AssetsColor: String
并提供名称作为原始值(例如case yellow = "appYellow"
),因此您不需要switch
,而只需UIColor(named: name.rawValue)