Если вы просто хотите интерполировать между двумя цветами, вы можете интерполировать между каждым цветовым компонентом RGB (вы также можете сделать это с помощью HSB).
Определите начальный цвет и цвет окончания. Я выбрал представление кортежа:
typealias Color = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
let startColor: Color = (red: 0.0/255, green: 114.0/255.0, blue: 96.0/255.0, alpha: 1.0)
let endColor: Color = (red: 10.0/255.0, green: 188.0/255.0, blue: 161.0/255.0, alpha: 1.0)
Вычислить количество шагов и размер шага для каждого цветового компонента:
var data = [/* ... */]
let steps = data.count > 1 ? CGFloat(data.count - 1) : 1.0
let rStep = (endColor.red - startColor.red)/steps,
gStep = (endColor.green - startColor.green)/steps,
bStep = (endColor.blue - startColor.blue)/steps,
aStep = (endColor.alpha - startColor.alpha)/steps
Наконец, в вашем cellForRowAtIndexPath
:
let rowIdx = CGFloat(indexPath.row)
myCell.backgroundColor = UIColor(red: startColor.red + rowIdx * rStep, green: startColor.green + rowIdx * gStep, blue: startColor.blue + rowIdx * bStep , alpha: startColor.alpha + rowIdx * aStep)
Если ваш мобильный конечно, вы хотите пересчитать размер шага для каждого цветового компонента.
Результат на детской площадке:
удивительный ответ спасибо! просто еще один вопрос - второй шаг, все эти вычисления, где я их объявляю ?, Я спрашиваю об этом, потому что он вызывает у меня ошибку. «Элементы участника экземпляра» не могут использоваться для типа «HomeVC». –
@CesarMtz Вы можете сохранить переменную каждого шага в качестве переменной экземпляра на контроллере представления и обновить ее, если ваш счет данных изменится. В этом случае вы можете поместить вычисление в функцию, называемую 'viewDidLoad'. Единственное, что вы не хотите, чтобы этот код вызывался для _every_ 'cellForRowAtIndexpath', поскольку размеры шага изменяются только тогда, когда изменяется количество ваших данных, поэтому вы делаете ненужные вычисления. –
Awesome Thanks !! –