Что такое iOS-эквивалент Android colors.xml

В android есть XML файл как res/values/colors.xml, который позволяет вам упорядочивать все ваши цвета, используемые в вашем приложении. Вот так:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="red">#e60012</color>
  <color name="blue">#33b5e5</color>
  ...
</resources>

Есть ли что-то подобное в iOS? Если нет, то как лучше всего организовать цвета, используемые во всем приложении?

Я хотел бы в конечном итоге заменить такие вещи, как [UIColor greenColor] на [MyColor greenColor].

Ответ 1

Я не сталкивался с файлом по умолчанию, подобным этому. Вы можете создать свой собственный .plist файл, который содержит значения и загружает их при запуске приложения. Другой вариант - создать категорию для UIColor, которая имеет кучу методов класса, возвращающих нужные вам цвета.

Вы можете создать что-то похожее на это:

UIColor+CustomColors.h:

@interface UIColor (CustomColors)

    + (UIColor *)customColor1;
    + (UIColor *)customColor2;
    ...

@end

UIColor+CustomColors.m:

#import "UIColor+CustomColors.h"

@implementation UIColor (CustomColors)

    + (UIColor *)customColor1 {
        return [UIColor colorWithRed:1.0f green:0.5f blue:0.5f alpha:1.0f];
    }
    + (UIColor *)customColor2 {
        return [UIColor colorWithRed:1.0f green:0.5f blue:1.0f alpha:1.0f];
    }
    ...

@end

Затем, когда вы устанавливаете фон, вы можете иметь что-то вроде этого:

ViewController.m:

#import "UIColor+CustomColors.h"

...

view.backgroundColor = [UIColor customColor1];

Ответ 2

Лучше позже, чем никогда...

Для Swift:

Создайте новый класс: MyColors.swift, который является расширением класса UIColor:

extension UIColor{

    static func color1() -> UIColor{

        return Utils.UIColorFromRGB(0x333333)
    }

    static func color2() -> UIColor{

        return Utils.UIColorFromRGB(0xffffff)
    }
}

В другом классе (возможно, Utils.swift) этот func:

class func UIColorFromRGB(rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

Вы можете использовать его как этот (обратите внимание на скобки после UIColor):

tableView.backgroundColor = UIColor.color1()

<я > ИзменитьИзменены функции на статические, чтобы цвета можно было использовать как обычные цвета iOS, не создавая экземпляр UIColor.

Ответ 3

Начиная с Xcode 9 вы можете определить цвета в каталогах активов:

Создайте или используйте существующий каталог активов, нажмите кнопку "плюс" в левом нижнем углу редактора и выберите "Новый набор цветов":

enter image description here

Вы увидите новый цвет под названием "Цвет".

Нажмите на него, затем нажмите, чтобы показать инспектор атрибутов:

enter image description hereenter image description hereenter image description here

Здесь вы можете определить свой цвет и множество других вариантов.

Дважды щелкните по названию, чтобы изменить название цвета.

enter image description here

Инструменты дизайна, такие как Sketch и Zeplin, позволят вам экспортировать цвета из вашего рабочего пространства в цветовые ресурсы для Xcode:

https://blog.zeplin.io/asset-catalog-colors-on-xcode-9-c4fdccc0381a