How do I convert a UIColor to a hexadecimal string?

后端 未结 3 600
独厮守ぢ
独厮守ぢ 2021-02-04 08:28

I have a project where I need to store the RGBA values of a UIColor in a database as an 8-character hexadecimal string. For example, [UIColor blueColor] would be @\"0000FFFF\".

相关标签:
3条回答
  • 2021-02-04 08:43

    Here it goes. Returns a NSString (e.g. ffa5678) with a hexadecimal value of the color.

    - (NSString *)hexStringFromColor:(UIColor *)color
    {
        const CGFloat *components = CGColorGetComponents(color.CGColor);
    
        CGFloat r = components[0];
        CGFloat g = components[1];
        CGFloat b = components[2];
    
        return [NSString stringWithFormat:@"%02lX%02lX%02lX",
                lroundf(r * 255),
                lroundf(g * 255),
                lroundf(b * 255)];
    }
    
    0 讨论(0)
  • 2021-02-04 08:57

    Swift 4 answer by extension UIColor:

    extension UIColor {
        var hexString: String {
            let colorRef = cgColor.components
            let r = colorRef?[0] ?? 0
            let g = colorRef?[1] ?? 0
            let b = ((colorRef?.count ?? 0) > 2 ? colorRef?[2] : g) ?? 0
            let a = cgColor.alpha
    
            var color = String(
                format: "#%02lX%02lX%02lX",
                lroundf(Float(r * 255)),
                lroundf(Float(g * 255)),
                lroundf(Float(b * 255))
            )
            if a < 1 {
                color += String(format: "%02lX", lroundf(Float(a)))
            }
            return color
        }
    }
    
    0 讨论(0)
  • 2021-02-04 09:05

    Get your floats converted to int values first, then format with stringWithFormat:

        int r,g,b,a;
    
        r = (int)(255.0 * rFloat);
        g = (int)(255.0 * gFloat);
        b = (int)(255.0 * bFloat);
        a = (int)(255.0 * aFloat);
    
        [NSString stringWithFormat:@"%02x%02x%02x%02x", r, g, b, a];
    
    0 讨论(0)
提交回复
热议问题