如何将字符串转换为UIColor(Swift)

时间:2019-05-13 02:17:26

标签: swift string type-conversion uicolor

我在SKScene中定义了几种颜色:

let color1 = UIColor(red: 1, green: 153/255, blue: 0, alpha: 1)
let color2 = UIColor(red: 74/255, green: 134/255, blue: 232/255, alpha: 1)
let color3 = UIColor(red: 0, green: 0, blue: 1, alpha: 1)
let color4 = UIColor(red: 0, green: 1, blue: 0, alpha: 1)
let color5 = UIColor(red: 153/255, green: 0, blue: 1, alpha: 1)
let color6 = UIColor(red: 1, green: 0, blue: 0 , alpha: 1)

这些颜色与我的游戏中具有不同值的图块相对应。一个图块带有color1,依此类推...

将图块添加在一起时,我添加了它们的值,并希望根据它们的值为其赋予新的颜色。

所以我希望图块的值能够影响图块的颜色。

我尝试过:

tile.color = UIColor(named: "color\(value)") ?? color1

但是当我这样做时,它总是使用默认值(color1)。

如何使图块的值影响图块的颜色?

2 个答案:

答案 0 :(得分:2)

命名为UIColor的字母来自xcassets目录中的颜色设置。


您可以根据您的值设置颜色

switch value {
    case 2: tile.color = color2
    ...
    default: tile.color = color1
}

或者您可以在xcassets目录中创建颜色集。

enter image description here enter image description here enter image description here

答案 1 :(得分:1)

UIColor named:仅在定义颜色设置资产时有效。由于您的颜色是用代码定义的,因此UIColor named:只会返回nil之外的任何内容。

一种解决方案是将颜色放入字典中,而不要使用单独的变量。

let colors: [String: UIColor] = [
    "color1" : UIColor(red: 1, green: 153/255, blue: 0, alpha: 1),
    "color2" : UIColor(red: 74/255, green: 134/255, blue: 232/255, alpha: 1),
    "color3" : UIColor(red: 0, green: 0, blue: 1, alpha: 1),
    "color4" : UIColor(red: 0, green: 1, blue: 0, alpha: 1),
    "color5" : UIColor(red: 153/255, green: 0, blue: 1, alpha: 1),
    "color6" : UIColor(red: 1, green: 0, blue: 0 , alpha: 1),
]

然后您可以将颜色设置为:

tile.color = colors["color\(value)"] ?? colors["color1"]!