答案 0 :(得分: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)
如果您的细胞计数发生变化,您当然希望重新计算每种颜色成分的步长。
游乐场的结果: