iOS Find Color at Point Between Two Colors

后端 未结 5 788
感情败类
感情败类 2020-12-05 06:00

I have a problem: I need to be able to take two colors and make a \'virtual gradient\' out of them. I then need to be able to find the color at any point on this line. My cu

5条回答
  •  伪装坚强ぢ
    2020-12-05 06:16

    Swift - 3.0 && 4.0

    extension UIColor {
        func toColor(_ color: UIColor, percentage: CGFloat) -> UIColor {
            let percentage = max(min(percentage, 100), 0) / 100
            switch percentage {
            case 0: return self
            case 1: return color
            default:
                var (r1, g1, b1, a1): (CGFloat, CGFloat, CGFloat, CGFloat) = (0, 0, 0, 0)
                var (r2, g2, b2, a2): (CGFloat, CGFloat, CGFloat, CGFloat) = (0, 0, 0, 0)
                guard self.getRed(&r1, green: &g1, blue: &b1, alpha: &a1) else { return self }
                guard color.getRed(&r2, green: &g2, blue: &b2, alpha: &a2) else { return self }
    
                return UIColor(red: CGFloat(r1 + (r2 - r1) * percentage),
                               green: CGFloat(g1 + (g2 - g1) * percentage),
                               blue: CGFloat(b1 + (b2 - b1) * percentage),
                               alpha: CGFloat(a1 + (a2 - a1) * percentage))
            }
        }
    }
    

    Usage:-

    let colorRed = UIColor.red
    let colorBlue = UIColor.blue
    
    let colorOutput = colorRed.toColor(colorBlue, percentage: 50)
    

    Result

提交回复
热议问题