Swift 獲取漸變色顏色值
阿新 • • 發佈:2021-02-04
Swift 獲取漸變色顏色值
最近需要完成一個字型顏色從白色隨著滑動漸變到黑色的效果。所以需要獲取顏色漸變值。
獲取顏色 RGB 值
/// 獲取 rgb
func colorRGB(_ color: UIColor) -> (r: CGFloat, g: CGFloat, b: CGFloat, a:CGFloat) {
var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
color.getRed( &r, green: &g, blue: &b, alpha: &a)
return (r,g,b,a)
}
獲取漸變色
原理: 獲取對應 RGB 計算等分值即可。
public extension UIColor {
/// 獲取漸變色
/// - Warning: 未考慮透明度問題。
/// - Parameters:
/// - startColor: 開始顏色
/// - endColor: 結束顏色
/// - count: 均分次數,返回顏色值數量,建議>=2
/// - Returns: 漸變色陣列, 數量始終會加上首位兩種顏色
static func gradientColors(start startColor:UIColor, end endColor: UIColor, count: Int) -> [UIColor] {
/// 獲取 rgb
func colorRGB(_ color: UIColor) -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) {
var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
color. getRed(&r, green: &g, blue: &b, alpha: &a)
return (r,g,b,a)
}
let startRGB = colorRGB(startColor)
let endRGB = colorRGB(endColor)
// 2. 計算均分顏色值(演算法參考:https://wenku.baidu.com/view/8578cb2879563c1ec5da71e0.html)
guard count >= 2 else {
return [startColor, endColor]
}
let stepR = (endRGB.r - startRGB.r)
let stepG = (endRGB.g - startRGB.g)
let stepB = (endRGB.b - startRGB.b)
let red: CGFloat = startRGB.r
let green: CGFloat = startRGB.g
let blue: CGFloat = startRGB.b
let colors = (0..<count).map() {
index -> UIColor in
let progress = CGFloat(index)/CGFloat(count-1)
let color = UIColor(red: red + stepR * progress, green: green + stepG * progress , blue: blue + stepB * progress, alpha: 1)
return color
}
return colors
}
}
獲取20等分顏色效果圖