我有一个带有自定义颜色的颜色资产目录。有没有办法在应用程序中获取和显示它们? 像这样
func getColorsFromAssetCatalog() -> [UIColor]? {
//Somehow return those colors
}
let colorsInCatalog = getColorsFromAssetCatalog()
for color in colorsInCatalog {
// Do something
}
答案 0 :(得分:0)
您可以使用此颜色从资产中获取颜色
let color = UIColor(named: "MyCustomColorName")
您可以声明一个支持的自定义颜色的枚举
enum CustomColors
{
case CustomYellow
case CustomRed
}
在转换盒中,您可以像这样通过资产传递颜色:
switch(CustomColorName)
{
case CustomYellow :
return UIColor(named: "MyCustomColorName")
}
答案 1 :(得分:0)
我认为您必须像这样手动获取它们
UIColor(named: "Color1")
UIColor(named: "Color2")
...
因此,我建议您为颜色和所有颜色情况创建具有静态常量的自定义结构
struct Color {
static let allCases = [Color.color1, Color.color2, ...]
static let color1 = UIColor(named: "Color1")!
static let color2 = UIColor(named: "Color2")!
...
}
然后,您可以通过获取
从xcassets目录中的“颜色集”中获取所有颜色。Color.allCases
答案 2 :(得分:0)
当前无法请求资产目录以编程方式告诉您资产中包含的所有资产。也就是说,没有API,恕我直言,它可以让您提取在“资产目录”中添加的颜色名称(或其他资产名称)。
当然,如果您已经知道名称,则可以获取颜色/资产。
此外,资产目录会编译为Assets.car
,这是不可读的,因此尝试读取该文件也是徒劳的。
无论如何...回到您的情况,您将必须手动维护某种机制,例如Enum
来跟踪颜色。
使用Enum
来维护您的自定义颜色名称,例如:
enum Colors: String {
//... previous cases
case weirdOrange = "WeirdOrange" //... now we add this one
}
在应用中将其用作:
UIColor(named: Colors.weirdOrange.rawValue)
为了您的目的,可以对其进行微调:
enum Colors: String, CaseIterable {
case funkyMunky = "FunkyMunky"
case weirdOrange = "WeirdOrange"
case popBlue = "PopBlue"
case murkyPoo = "MurkyPoo"
static var assetCatalogued: [UIColor] {
return self.allCases.compactMap { (colorCase) -> UIColor? in
return UIColor(named: colorCase.rawValue)
}
}
}
for color in Colors.assetCatalogued {
//Do something
print(color)
}
注意:
Colors.assetCatalogued
将不返回任何UIColor
s CaseIterable
用于.allCases
答案 3 :(得分:0)
扩展UIColor,如下所示:
extension UIColor {
public class var appBackgroundColor: UIColor { UIColor(named : "appBackgroundColor") ?? UIColor.white }
}
现在,您只需使用以下内容即可轻松在整个应用中访问它:
UIColor.appBackgroundColor
唯一的缺点是您必须在资产以及扩展名中添加颜色