23

现在我可以像这样将十六进制字符串转换为 rgb 颜色:

// Input is without the # ie : white = FFFFFF
+ (UIColor *)colorWithHexString:(NSString *)hexString
{
    unsigned int hex;
    [[NSScanner scannerWithString:hexString] scanHexInt:&hex];
    int r = (hex >> 16) & 0xFF;
    int g = (hex >> 8) & 0xFF;
    int b = (hex) & 0xFF;

    return [UIColor colorWithRed:r / 255.0f
                        green:g / 255.0f
                        blue:b / 255.0f
                        alpha:1.0f];
}

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

4

5 回答 5

42

使用此方法:

- (NSString *)hexStringForColor:(UIColor *)color {
      const CGFloat *components = CGColorGetComponents(color.CGColor);
      CGFloat r = components[0];
      CGFloat g = components[1];
      CGFloat b = components[2];
      NSString *hexString=[NSString stringWithFormat:@"%02X%02X%02X", (int)(r * 255), (int)(g * 255), (int)(b * 255)];
      return hexString;
}
于 2012-12-27T08:51:41.653 回答
20

使用 UIColor 的这个扩展来从中获取 hexString。

  extension UIColor {
        func toHexString() -> String {
            var r:CGFloat = 0
            var g:CGFloat = 0
            var b:CGFloat = 0
            var a:CGFloat = 0

            getRed(&r, green: &g, blue: &b, alpha: &a)

            let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0

            return String(format:"#%06x", rgb)
        }
    }
于 2016-10-13T10:39:22.540 回答
8

Anoop 答案不正确,因为如果您尝试使用[UIColor blackColor]它会返回绿色的十六进制字符串。
原因是系统足够切割以节省内存,它将设置

黑色
分量[0] = 0 (r=0,g=0,b=0) 和
分量[1] = 1 (a=1)。

对于白色
分量[0] = 1 (r=1,g=1,b=1) 和
分量[1] = 1 (a=1)。


使用以下类别将 UIColor 转换为十六进制
UIColor+Utility.h

@interface UIColor (Utility)

/**
 Return representaiton in hex
 */
-(NSString*)representInHex;
@end

UIColor+Utility.m

@implementation UIColor (Utility)
-(NSString*)representInHex
{
    const CGFloat *components = CGColorGetComponents(self.CGColor);
    size_t count = CGColorGetNumberOfComponents(self.CGColor);

    if(count == 2){
        return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
                lroundf(components[0] * 255.0),
                lroundf(components[0] * 255.0),
                lroundf(components[0] * 255.0)];
    }else{
        return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
                lroundf(components[0] * 255.0),
                lroundf(components[1] * 255.0),
                lroundf(components[2] * 255.0)];
    }
}
@end

于 2016-11-24T00:56:47.897 回答
6

这是我在 Swift 中使用的代码,请注意,当您向其发送使用 rgba 值创建的 UIColor 时,这似乎工作正常,但在发送预定义颜色时返回一些奇怪的结果,例如UIColor.darkGrayColor()

func hexFromUIColor(color: UIColor) -> String 
{
let hexString = String(format: "%02X%02X%02X", 
Int(CGColorGetComponents(color.CGColor)[0] * 255.0),
Int(CGColorGetComponents(color.CGColor)[1] *255.0),
Int(CGColorGetComponents(color.CGColor)[2] * 255.0))
return hexString
}
于 2015-01-07T04:03:03.747 回答
0

Objective-c UIColor 类别。这种方法可以避免类似的情况#FFFF00000000

- (id)hexString {
    CGFloat r, g, b, a;
    [self getRed:&r green:&g blue:&b alpha:&a];
    int rgb = (int)(r * 255.0f)<<16 | (int)(g * 255.0f)<<8 | (int)(b * 255.0f)<<0;
    if (a < 1) {
        rgb = (int)(a * 255.0f)<<24 | (int)(r * 255.0f)<<16 | (int)(g * 255.0f)<<8 | (int)(b * 255.0f)<<0;
    }
    
    return [NSString stringWithFormat:@"#%06x", rgb];
}
于 2020-11-28T02:25:35.917 回答