如何将UIColor转换为十六进制字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将UIColor转换为十六进制字符串?相关的知识,希望对你有一定的参考价值。

我有一个项目,我需要将UIColor的RGBA值作为8个字符的十六进制字符串存储在数据库中。例如,[UIColor blueColor]将是@“0000FFFF”。我知道我可以像这样得到组件值:

CGFloat r,g,b,a;
[color getRed:&r green:&g blue: &b alpha: &a];

但我不知道如何从这些值转到十六进制字符串。我已经看过很多关于如何走另一条路的帖子,但这个转换没有任何功能。

答案

首先将浮点数转换为int值,然后使用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];
另一答案

在这里。返回具有颜色的十六进制值的NSString(例如ffa5678)。

- (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)];
}
另一答案

Swift 4通过扩展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
    }
}

以上是关于如何将UIColor转换为十六进制字符串?的主要内容,如果未能解决你的问题,请参考以下文章

swift 将十六进制字符串转换为UIColor

c_cpp Objective-C类将十六进制字符串转换为UIColor。支持#RGB#ARGB #RRGGBB #AARRGGBBUsage:[UIColor colorWithHexString:

如何将 RGB 转换为 HTML 颜色?

IOS假设将一个十六进制的color转换成UIColor,非常有用

如何使用 c# 在 Xamarin.Ios 中将 UIColor 转换为字符串和字符串转换为 UIColor

如何将 UIColor 转换为 HEX 并在 NSLog 中显示