来自uicolor的十六进制颜色

Ely*_*ssi 13 hex uicolor

我有一个问题,将uicolor转换为十六进制颜色,这是我发现的

CGColorRef colorref = [[Colorview_ backgroundColor] CGColor];

int numComponents = CGColorGetNumberOfComponents(colorref);

if (numComponents == 4) {
    const CGFloat *components = CGColorGetComponents(colorref);

    int hexValue = 0xFF0000*components[0] + 0xFF00*components[1] + 0xFF*components[2];

    NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];
}
Run Code Online (Sandbox Code Playgroud)

这段代码给了我#5576149(例如)对于hexString,我们你看到有7位不是6,它不是十六进制颜色,任何帮助将不胜感激,thx.

ngb*_*ngb 13

上面的sylphos答案对于darkGrayColor不起作用.

这样做效果更好(取自http://softteco.blogspot.jp/2011/06/extract-hex-rgb-color-from-uicolor.html):

- (NSString *) hexFromUIColor:(UIColor *)color {
    if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
        const CGFloat *components = CGColorGetComponents(color.CGColor);
        color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
    }
    if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
        return [NSString stringWithFormat:@"#FFFFFF"];
    }
    return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0), (int)((CGColorGetComponents(color.CGColor))[1]*255.0), (int)((CGColorGetComponents(color.CGColor))[2]*255.0)];
}
Run Code Online (Sandbox Code Playgroud)


Hit*_*eeb 2

NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];
Run Code Online (Sandbox Code Playgroud)

您正在将其格式化为带有 %d 的数字

你想用 %x 或 %X 将其格式化为十六进制——也许是字符串 %s 我没有检查函数正在做什么以及int hexValue持有什么

d 或 i 有符号十进制整数 392

x 无符号十六进制整数 7fa

X 无符号十六进制整数(大写字母) 7FA