1. 程式人生 > 其它 >Swift 獲取漸變色顏色值

Swift 獲取漸變色顏色值

技術標籤:iOS 移動開發漸變UIColor

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等分顏色效果圖

在這裡插入圖片描述