Cómo convertir UIColor a HEX y mostrar en NSLog

He comprobado varios enlaces sobre cómo convertir códigos UIColor a HEX, pero no estoy seguro de cómo llamar al método para mostrarlos en NSLog. No tengo la reputación de comentar, por lo que postear como una pregunta es mi último recurso. Quiero que se muestre cuando ejecuto mi aplicación en el logging.

Segundo, ¿dónde ingreso el número de color RGB (R = 30, G = 171, B = 13)? Veo que todos los ejemplos usan Array [0], [1], [2] que normalmente se refiere a la position del índice, entonces, ¿dónde agrego los valores de color?

Tengo este código:

- (NSString *) hexFromUIColor:(UIColor *)color { if (CGColorGetNumberOfComponents(color.CGColor) < 4) { const CGFloat *components = CGColorGetComponents(color.CGColor); color = [UIColor colorWithRed:components[30] green:components[141] blue:components[13] 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)]; } 

Enlaces que he verificado:

color hexadecimal de uicolor

¿Cómo convertir códigos de color HEX RGB a UIColor?

He intentado llamar al método en viewDidLoad pero no funcionará sin UIColor. Estoy seguro de que es algo simple.

Gracias a cualquiera que conteste.

¿Cuál es el código que utilizo en mi vista, LoadLoad para llamar a este método y mostrarlo en NSLog?

Use el siguiente código:

 - (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)]; } 

Después de get la cadena de código hexadecimal, llame al método siguiente para get UIColor

 - (UIColor *) colorWithHexString: (NSString *) hexString { NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString]; NSLog(@"colorString :%@",colorString); CGFloat alpha, networking, blue, green; // #RGB alpha = 1.0f; networking = [self colorComponentFrom: colorString start: 0 length: 2]; green = [self colorComponentFrom: colorString start: 2 length: 2]; blue = [self colorComponentFrom: colorString start: 4 length: 2]; return [UIColor colorWithRed: networking green: green blue: blue alpha: alpha]; } 

 - (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length { NSString *substring = [string substringWithRange: NSMakeRange(start, length)]; NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring]; unsigned hexComponent; [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent]; return hexComponent / 255.0; } 

USO

 // ( R = 30, G = 171, B = 13)? CGFloat networking = 30.0; CGFloat green = 171.0; CGFloat blue = 13.0; CGFloat alpha = 255.0 UIColor *color = [UIColor colorWithRed:(networking/255.0) green:(green/255.0) blue:(blue/255.0) alpha:(alpha/255.0)]; NSString *colorCode = [self hexStringFromColor:color]; NSLog(@"Color Code: %@", colorCode); UIColor *resultColor = [self colorWithHexString:colorCode]; 

La respuesta de Kampai funciona para colors RGB, pero no para monocromo (UIColor colorWithWhite: alpha :). Tampoco maneja alpha, que es compatible con HEX. Aquí hay una versión ligeramente modificada de hexStringFromColor:

 + (NSString *)hexStringFromColor:(UIColor *)color { CGColorSpaceModel colorSpace = CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)); const CGFloat *components = CGColorGetComponents(color.CGColor); CGFloat r, g, b, a; if (colorSpace == kCGColorSpaceModelMonochrome) { r = components[0]; g = components[0]; b = components[0]; a = components[1]; } else if (colorSpace == kCGColorSpaceModelRGB) { r = components[0]; g = components[1]; b = components[2]; a = components[3]; } return [NSString stringWithFormat:@"#%02lX%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255), lroundf(a * 255)]; } 

Y, finalmente, la versión que funciona con alpha -component y usa el multiplicador correcto

 extension UIColor { var hexString: String? { var networking: CGFloat = 0 var green: CGFloat = 0 var blue: CGFloat = 0 var alpha: CGFloat = 0 let multiplier = CGFloat(255.999999) guard self.getRed(&networking, green: &green, blue: &blue, alpha: &alpha) else { return nil } if alpha == 1.0 { return String( format: "#%02lX%02lX%02lX", Int(networking * multiplier), Int(green * multiplier), Int(blue * multiplier) ) } else { return String( format: "#%02lX%02lX%02lX%02lX", Int(networking * multiplier), Int(green * multiplier), Int(blue * multiplier), Int(alpha * multiplier) ) } } } 

En Swift, simplemente creé una extensión para UIColor …

 extension UIColor { var hexString:NSString { let colorRef = CGColorGetComponents(self.CGColor) let r:CGFloat = colorRef[0] let g:CGFloat = colorRef[1] let b:CGFloat = colorRef[2] return NSString(format: "#%02lX%02lX%02lX", lroundf(Float(r * 255)), lroundf(Float(g * 255)), lroundf(Float(b * 255))) } } 

Versión Swift 2 de la respuesta aceptada. Me convertí en una extensión UIColor .

 extension UIColor { var hexString: String { let components = CGColorGetComponents(self.CGColor) let networking = Float(components[0]) let green = Float(components[1]) let blue = Float(components[2]) return String(format: "#%02lX%02lX%02lX", lroundf(networking * 255), lroundf(green * 255), lroundf(blue * 255)) } } 

La rápida respuesta 2 convertida a veloz 3

 var hexString: String { let components = self.cgColor.components let networking = Float((components?[0])!) let green = Float((components?[1])!) let blue = Float((components?[2])!) return String(format: "#%02lX%02lX%02lX", lroundf(networking * 255), lroundf(green * 255), lroundf(blue * 255)) }