Как конвертировать строку в UIColor (Swift) - PullRequest
0 голосов
/ 13 мая 2019

У меня есть несколько цветов, определенных в моей 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 ]

2 голосов
/ 13 мая 2019

Именованные UIColor s инициализируются из набора цветов в каталоге 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 голос
/ 13 мая 2019

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"]!
...