我们如何使用资产目录颜色集

elG*_*pha 48 uicolor asset-catalog swift ios11 xcode9-beta

我通常在iOS上使用自定义UIColors使用Swift扩展,但现在使用iOS11/XCode9我们可以创建颜色集.我们怎样才能使用它们?

更新 - 提示

正如@Cœur所说,我们可以拖放de color,并像UIColor对象一样使用它,可能的解决方案可以用作扩展:

UIColor作为扩展

或者作为常数:

UIColor作为常量

现在我想知道我们是否可以访问它们,就像UIImage访问资产图像一样,如:

UIImage(named: "image-name") -> UIColor(named: "color-name")
Run Code Online (Sandbox Code Playgroud)

小智 62

UIColor(named: "myColor") 
Run Code Online (Sandbox Code Playgroud)

资料来源:WWDC 2017 Session 237 - MapKit的新功能


警告:您的项目的部署目标需要设置为iOS 11.0.

  • 这将需要部署目标= 11.0. (4认同)

Cœu*_*œur 37

(问题更新的简答:UIColor(named: "MyColor")Xcode 9.0中有)

回答原来的问题:

  1. 你创建你的颜色集

在此输入图像描述

  1. 你可以在你的片段中找到你的颜色,然后拖放它

在此输入图像描述

  1. 在查看源代码时,它将转换为颜色文字:

    #colorLiteral(red: 0, green: 0.6378085017, blue: 0.8846047521, alpha: 1)

你注意到红色,绿色和蓝色的值是如何不同的?这是因为我使用Color Space定义了它们Display P3,但colorLiteral使用的是Color Space sRGB.

  • Xcode 没有添加`UIColor(named:)`,它是 UIKit 的一部分,从 iOS 11 开始就内置于 iOS 中。这似乎是一个微妙的点,但它很重要。Xcode 无法向 UIKit 添加方法。 (4认同)

Kis*_*mar 31

在 Xcode 11 中按 command + shift + L ,它将打开一个片段,选择最后一个,就像我在图像拖放中显示的那样。

在此处输入图片说明

  • 这是添加颜色文字的好方法,但如果我们需要使用资源稍微更改颜色,则更改不会反映在拖动文字的代码中。因此,我仍在寻找使用资产名称并处理 UIColor 的可选返回类型的解决方案。 (4认同)
  • 荣誉。从来没有想过要检查这个菜单。 (3认同)

rob*_*ers 18

精简版

将颜色集添加到资产目录,为其命名并在属性检查器中设置颜色,然后在代码中调用它UIColor(named: "MyColor").

完整说明

  1. 在资产目录查看器中,单击主面板右下角的加号按钮,然后选择" 新建颜色集"

    新颜色集菜单

  2. 单击白色方块,然后选择" 属性"检查器(右侧窗格中最右侧的图标)

  3. 从那里你可以命名并选择你的颜色.

    在此输入图像描述

  4. 要在代码中使用它,请使用它UIColor(named: "MyColor").这将返回一个可选项,因此在大多数情况下您需要打开它(这可能是少数可以接受强制解包的情况之一,因为您知道资产目录中存在颜色).

  • 好答案。我希望 iOS 能够让这些资产成为你可以编译的东西,就像 Android 对 R.color.myColor 所做的一样。新的 Colors.xcassets 方法肯定更好,但如果您输入错误的颜色名称,删除颜色而没有找到它使用的所有点等,仍然会导致运行时错误。 似乎应该在编译时捕获的东西而不是而不是在运行时导致崩溃(我知道您可以将它视为可选的而不是强制解开它,但这会增加更多的复杂性......那么重点是什么?!):) (7认同)
  • 我怎么能在iOS <= 10中做到这一点 (6认同)
  • 这将需要部署目标= 11.0. (2认同)

Bol*_*him 16

您可以使用这种方式进行简单访问(swift 4 & swift 5)

enum AssetsColor: String {
    case backgroundGray
    case blue
    case colorAccent
    case colorPrimary
    case darkBlue
    case yellow
}

extension UIColor {
    static func appColor(_ name: AssetsColor) -> UIColor? {
         return UIColor(named: name.rawValue)
    }
}
Run Code Online (Sandbox Code Playgroud)

使用:

userNameTextField.textColor = UIColor.appColor(.blue)
Run Code Online (Sandbox Code Playgroud)


Hit*_*wal 11

您需要使用UIColor(named: "appBlue")

而且,您可以在UIColor扩展中创建一个函数以进行简单访问。

enum AssetsColor {
   case yellow
   case black
   case blue
   case gray
   case green
   case lightGray
   case seperatorColor
   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: "appRad")
    case .seperatorColor:
        return UIColor(named: "appSeperatorColor")
    case .green:
        return UIColor(named: "appGreen") 
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样使用

userNameTextField.textColor = UIColor.appColor(.gray)
Run Code Online (Sandbox Code Playgroud)

  • 您可以为 `enum AssetsColor: String` 添加原始值,并提供名称作为原始值(例如 `case Yellow = "appYellow"`),这样您就不需要 `switch`,而只需要 `UIColor(named: name.rawValue) )` (2认同)

Ash*_*ish 8

 // iOS
 let color = UIColor(named: "SillyBlue")

 // macOS
 let color = NSColor(named: "SillyBlue")
Run Code Online (Sandbox Code Playgroud)

  • 该 URL 与资产目录颜色、颜色或 iOS 无关。 (5认同)

小智 7

对于您的问题,如果您可以使用文字访问图像等颜色资产,从 Xcode 10.2 开始,您可以输入colorliteral,然后您可以在资产管理器下选择要使用的颜色。

示例片段