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

Jos*_*ght 13 hex objective-c uicolor ios

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

CGFloat r,g,b,a;
[color getRed:&r green:&g blue: &b alpha: &a];
Run Code Online (Sandbox Code Playgroud)

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

CSm*_*ith 22

首先将浮点数转换为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];
Run Code Online (Sandbox Code Playgroud)

  • 请记住,调用`getRed:green:blue; alpha:`将使用非RGB颜色失败,例如`[UIColor grayColor]`或`[UIColor whiteColor]`.因此,此解决方案仅适用于某些颜色. (2认同)

Raf*_*fAl 14

在这里.返回具有颜色的十六进制值的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)];
}
Run Code Online (Sandbox Code Playgroud)