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

时间:2017-06-06 18:50:12

标签: swift uicolor asset-catalog ios11 xcode9-beta

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

更新 - 提示

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

UIColor as an extension

或作为常数:

UIColor as a constant

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

ngOnInit(){}

9 个答案:

答案 0 :(得分:53)

UIColor(named: "myColor") 

来源:WWDC 2017 Session 237 —— What's New in MapKit

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

答案 1 :(得分:35)

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

回答原来的问题:

  1. 您创建颜色集
  2. enter image description here

    1. 你可以在你的片段中找到你的颜色并拖放它
    2. enter image description here

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

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

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

答案 2 :(得分:14)

Short Version

Add a colour set to an asset catalog, name it and set your colour in the attributes inspector, then call it in your code with <div class="header"> <div class="slider-pro" id="my-slider"> <div class="sp-slides"> <div class="sp-slide"> <img class="sp-image" src="https://dl.dropbox.com/s/rp1imhbw1s06vjv/IMG_4875.JPG" /> </div> <div class="sp-slide"> <img class="sp-image" src="https://dl.dropbox.com/s/6ffmnfh0oukrgb7/IMG_5064.JPG" /> </div> </div> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>.

Full Instructions

  1. In the asset catalog viewer, click the plus button at the bottom right of the main panel and choose New Color Set

    New Color Set menu

  2. Click on the white square, and select the Attributes Inspector (right-most icon in the right pane)

  3. From there you can name and choose your colour.

    enter image description here

  4. To use it in your code, call it with #top-background-flag { border-top: 2px solid #C2C2C2; /* top border on the parent */ position: relative; padding-bottom: 3.5rem; overflow: hidden; } #top-background-flag:before { background-color: #5DCAD3; transform: skewy(-4deg); /* angle you want */ transform-origin: bottom left; border-bottom: 2px solid #C2C2C2; /* bottom border skews with the object */ content: ' '; display: block; height: 100%; width: 100%; position: absolute; z-index: -1; bottom: 0; } . This returns an optional, so you'll need to unwrap it in most cases (this is probably one of the few cases where a force unwrap is acceptable, given you know the colour exists in your asset catalog).

答案 3 :(得分:4)

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

 // macOS
 let color = NSColor(named: "SillyBlue")

答案 4 :(得分:4)

在Xcode 11中,按Command + shift + L,它将打开一个代码段,选择最后一个如我在图像拖放中显示的代码。

enter image description here

答案 5 :(得分:2)

您需要使用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") 
    }
}

您可以像这样使用它

userNameTextField.textColor = UIColor.appColor(.gray)

答案 6 :(得分:1)

对于您的问题,是否可以使用文字访问颜色资产,例如图像,从xcode 10.2开始,您可以键入colorliteral,然后可以选择资产管理器下要使用的颜色。< / p>

sample snippet

答案 7 :(得分:1)

使用UIColor(named:)时,如果在Swift程序包中加载颜色时遇到延迟:

以上答案对于常规项目完全有效,但是如果您使用快速打包的资产,则在使用UIColor(named: "example_name")时加载颜色会出现延迟。如果您使用针对模块的UIColor(named: "background", in: Bundle.module, compatibleWith: .current)重载,则颜色将立即加载而不会产生任何延迟。

注意:我对Xcode 12.1很有经验。

答案 8 :(得分:0)

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

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)
    }
}