ios - 如何以编程方式获取颜色资产目录中包含的所有颜色?
问题描述
我有一个包含自定义颜色的颜色资产目录。有没有办法在应用程序中获取和显示它们?像这样的东西
func getColorsFromAssetCatalog() -> [UIColor]? {
//Somehow return those colors
}
let colorsInCatalog = getColorsFromAssetCatalog()
for color in colorsInCatalog {
// Do something
}
解决方案
目前无法请求资产目录以编程方式告诉您它包含的所有资产。即没有API,恕我直言,可以让您获取您在资产目录中添加的颜色名称(或其他资产名称)。
如果您已经知道名称,您当然可以获取颜色/资产。
此外,资产目录编译成Assets.car
不可读的,因此尝试读取该文件也是徒劳的。
无论如何...回到你的情况,你必须手动维护一些机制,比如Enum
跟踪颜色。
解决方案:
- 为资产目录添加颜色;说名为“奇怪的橙色”
使用 an
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
- 添加/删除相关颜色资产时,您必须手动添加/删除案例
推荐阅读
- assembly - nasm x86 一种计算 e^x 的方法
- linux - 由于 Pandoc 不可用,无法在 Amazon Linux 2 上运行 rmarkdown
- java - 我的倒计时只减少了 1 并且没有更多,这是为什么呢?
- python-3.x - 使用 np.where 或 loc 更新 pandas 数据框的多列
- bash - 如何在 bash 中编写“rostopic echo”?
- java - 如果输出为0,如何打印数组?
- python - 将 Amazon Polly 的声音下载为 mp3 文件的网站
- python - 在 Pandas 中删除行时如何忽略 \N 转义?
- php - PHP + Apache:获取应用程序基本 URL 路径的通用方法
- css - 如何反转元素部分的颜色?