直播小程序源码,Swift 获取渐变色颜色值

发布时间 2023-03-28 14:06:13作者: 云豹科技-苏凌霄

直播小程序源码,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
    }
}

 

 以上就是直播小程序源码,Swift 获取渐变色颜色值, 更多内容欢迎关注之后的文章