Как мы можем использовать наборы цветов каталога объектов

Обычно я использую пользовательские UIColors на iOS, используя расширения с Swift, но теперь с iOS11/XCode9 мы можем создавать наборы цветов. Как мы можем их использовать?

Обновление - подсказка

Поскольку @Cœur говорит, что мы можем перетащить и отбросить цвет и использовать его, как объект UIColor, и возможное решение может использовать его как расширение:

UIColor as an extension

Или как константа:

UIColor as a constant

Теперь я хочу знать, можем ли мы получить к ним доступ, как доступ UIImage к изображению объекта или нет, например:

UIImage(named: "image-name") -> UIColor(named: "color-name")

Ответы

Ответ 2

(короткий ответ на вопрос: в Xcode 9.0 есть UIColor(named: "MyColor"))

Отвечая на исходный вопрос:

  1. вы создаете свой набор цветов

enter image description here

  1. вы обнаружите свой цвет среди своих фрагментов, и вы перетащите его

enter image description here

  1. он будет переводить в цветной литерал при просмотре исходного кода:

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

Вы замечаете, как различаются значения красного, зеленого и синего? Это потому, что я определил их с помощью Color Space Display P3, но colorLiteral использует Color Space sRGB.

Ответ 3

Укороченная версия

Добавьте набор цветов в каталог активов, назовите его и установите цвет в инспекторе атрибутов, затем вызовите его в коде с помощью UIColor(named: "MyColor").

Полные инструкции

  1. В средстве просмотра каталога активов нажмите кнопку "плюс" в правом нижнем углу основной панели и выберите " Новый набор цветов"

    New Color Set menu

  2. Нажмите на белый квадрат и выберите Инспектор атрибутов (самый правый значок в правой панели)

  3. Оттуда вы можете назвать и выбрать свой цвет.

    enter image description here

  4. Чтобы использовать его в своем коде, назовите его с помощью UIColor(named: "MyColor"). Это возвращает необязательный параметр, поэтому вам придется разворачивать его в большинстве случаев (это, вероятно, один из немногих случаев, когда развертывание силы приемлемо, поскольку вы знаете, что цвет существует в вашем каталоге активов).

Ответ 4

Вам нужно использовать 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)

Ответ 5

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

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

Ответ 6

Вы можете использовать этот способ для простого доступа (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)
    }
}