直播小程式原始碼,Swift 獲取漸變色顏色值

zhibo系統開發發表於2023-03-28

直播小程式原始碼,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. 計算均分顏色值(演演算法參考:)
        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
    }
}


 以上就是直播小程式原始碼,Swift 獲取漸變色顏色值, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2942106/,如需轉載,請註明出處,否則將追究法律責任。

相關文章