iphone - hexadecimal - Cómo convertir códigos de color HEX RGB a UIColor?
uicolor to hex (17)
Creé una herramienta en línea para convertir instantáneamente cualquier código hexadecimal en un fragmento de código UIColor para Swift y Objective-C, cuando no es conveniente usar métodos o complementos personalizados: http://ebelinski.com/uihex/
Tengo un código hexadecimal RGB como #ffffff como NSString y quiero convertirlo en un UIColor. ¿Hay una manera simple de hacer eso?
Creo que dividiría los seis caracteres en tres pares, luego los convertiría en decimales y luego los dividiría en 255 para obtener cada componente de color como un flotador.
Luego puede pasar los componentes a:
[UIColor colorWithRed: green: blue: alpha:1];
Creo que hay una manera aún más fácil cuando se usan valores HEX. Simplemente agregue una definición en la parte superior de su archivo o haga referencia a un archivo de encabezado para la conversión (UIColorFromRGB). Incluso puede agregar una plantilla de valores de color HEX fijos.
#define CLR_YELLOW_TEXT 0xf4dc89 // A Light Yellow text
#define CLR_GREEN_TEXT 0x008040 // Dark Green text for my buttons
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
Luego solo refiérase a su código usando los valores HEX directamente o sus valores hexadecimales definidos. Por ejemplo...
[myButton1 setTitleColor:UIColorFromRGB(0xd02d2d) forState:UIControlStateNormal];
[myButton2 setTitleColor:UIColorFromRGB(CLR_GREEN_TEXT) forState:UIControlStateNormal];
[myButton3 setTitleColor:UIColorFromRGB(CLR_YELLOW_TEXT) forState:UIControlStateNormal];
(PD: esto supone un Alfa de 1.0, pero siempre se puede cambiar en la definición).
Disfrutar.
Encontré una biblioteca de cocoapod muy útil para crear UIColor usando los valores "#RRGGBB".
pod ''UIColor-HexRGB''
Estaba buscando una solución simple y se me ocurrió esto (no completamente Objective-C, pero funciona como un encanto):
NSString *stringColor = @"#AABBCC";
NSUInteger red, green, blue;
sscanf([stringColor UTF8String], "#%02X%02X%02X", &red, &green, &blue);
UIColor *color = [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1];
Fácil, solo ve a este sitio web y escribe tu valor hexadecimal: http://www.corecoding.com/utilities/rgb-or-hex-to-float.php
Hay una buena categoría para UIColor llamada "UIColor+Expanded" que tiene un método de clase para obtener un UIColor a partir de una cadena hexadecimal RGB:
Es simple de usar:
UIColor *myColor = [UIColor colorWithHexString:@"FF0000"];
Además, agrega muchas otras utilidades potencialmente útiles a UIColor. Más información está disponible en este artículo .
La forma más fácil que encontré: Hex to UIColor Converter
Simplemente escriba el número hexadecimal sin ''#'', y devuelve el código UIColor. Por ejemplo, el código para el color naranja (# f77f00) es:
[UIColor colorWithRed:0.969 green:0.498 blue:0 alpha:1.0]
No olvide que tiene la opción de convertir sus valores hexadecimales en RGB e ingresarlos en el constructor de la interfaz. Guardará algunas líneas de código.
Si está usando valores hexadecimales ...
#define UIColorFromRGB(rgbValue) [UIColor /
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 /
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 /
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
//Then use any Hex value
self.view.backgroundColor = UIColorFromRGB(0xD2691E);
Si la conversión de ObjectiveC a swift es difícil para usted, aquí está la respuesta con Swift. Actualmente solo toma cadenas sin el #, pero puede agregar un método de escaneo para omitirlo, creo.
func stringToColor(stringColor: String) -> UIColor {
var hexInt: UInt32 = 0
let scanner = NSScanner(string: stringColor)
scanner.scanHexInt(&hexInt)
let color = UIColor(
red: CGFloat((hexInt & 0xFF0000) >> 16)/225,
green: CGFloat((hexInt & 0xFF00) >> 8)/225,
blue: CGFloat((hexInt & 0xFF))/225,
alpha: 1)
return color
}
Si no desea escribir todo el código anterior, puede consultar este sitio: http://www.diovo.com/apps/rgb-to-uicolor-converter.html
De un color HEX como este: #FFFFFF, el sitio lo convierte en una cadena como esta:
UIColor *aColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.000];
Supongo que es un poco tarde ... pero encontré esta versión en el repositorio de WhiteHouse Github que lo hace de una manera bastante elegante:
+(UIColor *)colorFromRGBHexString:(NSString *)colorString {
if(colorString.length == 7) {
const char *colorUTF8String = [colorString UTF8String];
int r, g, b;
sscanf(colorUTF8String, "#%2x%2x%2x", &r, &g, &b);
return [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:1.0];
}
return nil;
}
Terminé creando una categoría para UIColor
que puedo reutilizar en mis otros proyectos. Github: https://github.com/mattquiros/UIColorHexColor
El uso es como:
UIColor *customRedColor = [UIColor colorFromHex:0x990000];
Esto es mucho más rápido que pasar una cadena y convertirla a un número y luego cambiar los bits. También puede importar la categoría desde su archivo .pch
para que pueda usar colorFromHex
en todas partes en su aplicación como si UIColor
incorporada en UIColor
:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
// Your other stuff here...
#import "UIColor+HexColor.h"
#endif
En algún código mío , utilizo 2 funciones diferentes:
void SKScanHexColor(NSString * hexString, float * red, float * green, float * blue, float * alpha) {
NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
if([cleanString length] == 3) {
cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@",
[cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)],
[cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)],
[cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]];
}
if([cleanString length] == 6) {
cleanString = [cleanString stringByAppendingString:@"ff"];
}
unsigned int baseValue;
[[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue];
if (red) { *red = ((baseValue >> 24) & 0xFF)/255.0f; }
if (green) { *green = ((baseValue >> 16) & 0xFF)/255.0f; }
if (blue) { *blue = ((baseValue >> 8) & 0xFF)/255.0f; }
if (alpha) { *alpha = ((baseValue >> 0) & 0xFF)/255.0f; }
}
Y luego lo uso así:
UIColor * SKColorFromHexString(NSString * hexString) {
float red, green, blue, alpha;
SKScanHexColor(hexString, &red, &green, &blue, &alpha);
return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}
Si prefiere usar esto como una categoría de UIColor
, entonces solo se trata de alterar algunas líneas:
+ (UIColor *) colorFromHexString:(NSString *)hexString {
NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
if([cleanString length] == 3) {
cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@",
[cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)],
[cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)],
[cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]];
}
if([cleanString length] == 6) {
cleanString = [cleanString stringByAppendingString:@"ff"];
}
unsigned int baseValue;
[[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue];
float red = ((baseValue >> 24) & 0xFF)/255.0f;
float green = ((baseValue >> 16) & 0xFF)/255.0f;
float blue = ((baseValue >> 8) & 0xFF)/255.0f;
float alpha = ((baseValue >> 0) & 0xFF)/255.0f;
return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}
Esto manejará cadenas como "#abc", "# abcdef31", etc.
+ (UIColor *)colorWithHexString:(NSString *)colorString
{
colorString = [colorString stringByReplacingOccurrencesOfString:@"#" withString:@""];
if (colorString.length == 3)
colorString = [NSString stringWithFormat:@"%c%c%c%c%c%c",
[colorString characterAtIndex:0], [colorString characterAtIndex:0],
[colorString characterAtIndex:1], [colorString characterAtIndex:1],
[colorString characterAtIndex:2], [colorString characterAtIndex:2]];
if (colorString.length == 6)
{
int r, g, b;
sscanf([colorString UTF8String], "%2x%2x%2x", &r, &g, &b);
return [UIColor colorWithRed:(r/255.0) green:(g/255.0) blue:(b/255.0) alpha:1.0];
}
return nil;
}
para el formato # 123, 123, # fff195, fff195
+ (UIColor *)colorWithHexValue:(int)hexValue
{
float red = ((hexValue & 0xFF0000) >> 16)/255.0;
float green = ((hexValue & 0xFF00) >> 8)/255.0;
float blue = (hexValue & 0xFF)/255.0;
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}
para el formato 0xfff195
+(UIColor*)colorWithHexString:(NSString*)hexString
{
NSString *cString = [[hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
if ([cString length] < 6) return [UIColor grayColor];
if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];
if ([cString length] != 6) return [UIColor grayColor];
NSRange range;
range.location = 0;
range.length = 2;
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float) r / 255.0f)
green:((float) g / 255.0f)
blue:((float) b / 255.0f)
alpha:1.0f];
}