online hexadecimal from ios objective-c iphone ipad uicolor

ios - hexadecimal - uicolor to rgb



Cómo convertir UIColor a HEX y mostrar en NSLog (8)

Y finalmente la versión que funciona con el componente alfa y usa el multiplicador correcto

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

He revisado 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 publicar como una pregunta es mi último recurso. Quiero que se muestre cuando ejecuto mi aplicación en el registro.

En segundo lugar, ¿dónde ingreso el número de color RGB (R = 30, G = 171, B = 13)? Veo que todos los ejemplos usan Matriz [0], [1], [2] que normalmente se refiere a la posición 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 revisado:

color hexadecimal de uicolor

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

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

Gracias a cualquiera que responda.

¿Cuál es el código que uso en mi viewDidLoad para llamar a este método y mostrarlo en NSLog?


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))) } }


La respuesta de Kampai funciona para los colores RGB, pero no para los monocromos (UIColor colorWithWhite: alpha :). Tampoco maneja alfa, lo que HEX admite. 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)]; }


La respuesta rápida 2 convertida a veloz 3

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


Swift 2 versión de la respuesta aceptada. UIColor en una extensión de UIColor .

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


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 obtener la cadena de código hexadecimal, llame al método siguiente para obtener UIColor

- (UIColor *) colorWithHexString: (NSString *) hexString { NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString]; NSLog(@"colorString :%@",colorString); CGFloat alpha, red, blue, green; // #RGB alpha = 1.0f; red = [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: red 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 red = 30.0; CGFloat green = 171.0; CGFloat blue = 13.0; CGFloat alpha = 255.0 UIColor *color = [UIColor colorWithRed:(red/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];


Otras respuestas de Swift fallan para UIColors como el blanco, donde CGColor solo devuelve 2 componentes.

Aquí hay una versión de Swift 4 que no tiene ese problema y también devuelve información de transparencia al final de la cadena si es necesario (formato web).

Por ejemplo:

Blanco devolverá #FFFFFF

Blanco con 50% de opacidad devolverá # FFFFFF7F

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 } }


Trampa potencial cuando se trata con Alpha : las cadenas HEX vienen en diferentes formatos, algunas tienen su alfa al comienzo de la cadena hexadecimal y otros formatos la tienen al final. Dependiendo de su fondo, puede tener una idea diferente de cómo se formatea la cadena hexagonal. Para los desarrolladores de Android probablemente sea con el alfa al comienzo, para los desarrolladores web probablemente estará al final de la cadena. POR LO TANTO, INDIQUE SIEMPRE EL FORMATO DE LA CADENA HEXAGONAL para evitar confusiones. Las cadenas hexagonales de Android deben tener el alfa al inicio. Así que esa es una trampa en la que las personas pueden caer cuando se trata de cadenas hexadecimales (lo hice) y, por lo tanto, es importante decir cuál es el formato esperado. Entonces, si estás desarrollando una aplicación tanto para iOS como para Android, sal de esta trampa.

Enlaces: https://en.wikipedia.org/wiki/RGBA_color_space para obtener detalles sobre por qué una cadena HEX puede formatearse de diferentes maneras, algunos casos con el alfa al inicio. Enlaces de Android https://developer.android.com/reference/android/graphics/Color.html y https://gist.github.com/lopspower/03fb1cc0ac9f32ef38f4

TENGA EN CUENTA QUE #AARRGGBB formato de cadena hexadecimal Utilice el siguiente código para que Alpha esté al principio de la cadena.

(Nota: si se devuelve color == null negro).

+(NSString*)hexStringFromColor:(UIColor *)color { CGFloat r = 0, g = 0, b = 0, a = 1; if (color) { [color getRed:&r green:&g blue:&b alpha:&a]; } return [NSString stringWithFormat:@"#%02lX%02lX%02lX%02lX", lroundf(a * 255.0), lroundf(r * 255.0), lroundf(g * 255.0), lroundf(b * 255.0) ]; }