2016-08-07 3 views
1

Так в настоящее время я работаю с TableViewController, но я хочу, чтобы это было как градиент Tableview на каждой ячейке, как показано на рисункеTableViewCell Цвет фона Градиент

enter image description here

Есть ли хороший способ сделать это зависит от размера массива, который я заполняю таблицей?

ответ

2

Если вы просто хотите интерполировать между двумя цветами, вы можете интерполировать между каждым цветовым компонентом 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) 

Если ваш мобильный конечно, вы хотите пересчитать размер шага для каждого цветового компонента.

Результат на детской площадке:

enter image description here

+0

удивительный ответ спасибо! просто еще один вопрос - второй шаг, все эти вычисления, где я их объявляю ?, Я спрашиваю об этом, потому что он вызывает у меня ошибку. «Элементы участника экземпляра» не могут использоваться для типа «HomeVC». –

+1

@CesarMtz Вы можете сохранить переменную каждого шага в качестве переменной экземпляра на контроллере представления и обновить ее, если ваш счет данных изменится. В этом случае вы можете поместить вычисление в функцию, называемую 'viewDidLoad'. Единственное, что вы не хотите, чтобы этот код вызывался для _every_ 'cellForRowAtIndexpath', поскольку размеры шага изменяются только тогда, когда изменяется количество ваших данных, поэтому вы делаете ненужные вычисления. –

+0

Awesome Thanks !! –