Что такое 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 here]()
![enter image description here]()
![enter image description here]()
Здесь вы можете определить свой цвет и множество других вариантов.
Дважды щелкните по названию, чтобы изменить название цвета.
![enter image description here]()
Инструменты дизайна, такие как Sketch и Zeplin, позволят вам экспортировать цвета из вашего рабочего пространства в цветовые ресурсы для Xcode:
https://blog.zeplin.io/asset-catalog-colors-on-xcode-9-c4fdccc0381a
Ответ 4
Я создал небольшой инструмент, который поможет создать каталог цветов для iOS, если у вас уже есть набор цветов для Android, включая ночной режим.
https://github.com/StainlessStlRat/AndroidColorsToIOS/blob/master/colors_xml_to_ios_catalog.py