Tengo un código hexadecimal RGB como #ffffff como NSString y quiero convertirlo en un UIColor. ¿Hay una manera simple de hacer eso?Cómo convertir códigos de color HEX RGB a UIColor?
Respuesta
In some code of mine, 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 utilizar esto como una categoría UIColor
, entonces es sólo una cuestión de alterar unas pocas 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];
}
Este se encargará de cadenas como "#abc", "# abcdef31", etc. .
se ve bien! ¡gracias hombre! – openfrog
Entiendo todo hasta: '((baseValue >> 24) & 0xFF)'. (Obtengo la división por 255.0f). ¿Podrías explicar cómo llegas a cambiar 24, 16 y 8 bits? Y también, ¿por qué estás y estás con 0xFF? Gracias :) –
línea sobre "En algún código mío" no funciona – ArunaFromLK
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.
A continuación, puede pasar a los componentes:
[UIColor colorWithRed: green: blue: alpha:1];
Si está utilizando valores Hex ..
#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);
Buen compañero de trabajo. – ardochhigh
¡Ojalá Apple agregara esto a sus archivos de encabezado! no hay razón por la que no! – ishahak
Si no desea escribir todo esto código anterior, se puede comprobar en este sitio: http://www.diovo.com/apps/rgb-to-uicolor-converter.html
de un color HEX así: #FFFFFF, el sitio de convertirlo en una cadena como esta:
UIColor *aColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.000];
aww enlace muerto :-( –
enlace alternativo: http://scratch.johnnypez.com/hex-to-uicolor/ – rog
Hay una bonita categoría para UIColor llama "UIColor+Expanded" que tiene un método de clase para conseguir un UIColor de una cadena RGB hexadecimal:
Es muy sencillo de utilizar:
UIColor *myColor = [UIColor colorWithHexString:@"FF0000"];
además de que añade un montón de otras materias potencialmente utilidades útiles para UIColor. Más información está disponible en this article.
No muestra ningún problema pero no funciona, importé UIColor + Expanded.h y UIColor + Expanded.m. Aquí está la línea. Self.navigationController.navigationBar.tintColor = [UIColor colorWithHexString: @ "# 555555"]; – Souljacker
@ Ravin455 Probablemente necesite sacar ese símbolo # (como se muestra en mi respuesta original). –
+1 Esto será muy útil gracias –
fácil, basta con ir a este sitio web y escriba en su valor hexadecimal: http://www.corecoding.com/utilities/rgb-or-hex-to-float.php
no se olvide que usted tiene la opción de convert your hex values to RGB e introducirlas en el constructor de interfaces. Guardará algunas líneas de código.
http://colorpicker.com/ es el mejor en comparación con su enlace –
que estaba buscando una solución sencilla y se acercó con esto (no completamente Objective-C, pero funciona de maravilla):
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];
Gracias por publicar esto, ¡funciona excelente para mí! Ojalá pudiera darte +10 votos. – rog
¡Solución muy elegante! +1 –
La manera más fácil que he encontrado: 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]
nice one ehsan..simple super herramienta para obtener hexadecimal uicolor .. – RockandRoll
Enlace muerto. Esto todavía funciona: http://www.corecoding.com/utilities/rgb-or-hex-to-float.php – mm2001
supongo que esto es un poco tarde aquí ...pero me encontré con esta versión en el repositorio WhiteHouse Github que lo hace de una manera muy 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;
}
+ (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
Terminé creando una categoría para UIColor
que puedo reutilizar en mis otros proyectos. Github: https://github.com/mattquiros/UIColorHexColor
El uso va como:
UIColor *customRedColor = [UIColor colorFromHex:0x990000];
Esto es mucho más rápido que la transmisión de una cadena y la conversión a un número a continuación, desplazar los bits. También puede importar la categoría desde el interior de su archivo .pch
para que pueda utilizar fácilmente colorFromHex
todas partes en su aplicación como que está integrado en UIColor
:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
// Your other stuff here...
#import "UIColor+HexColor.h"
#endif
Creo que hay una manera aún más fácil cuando se utilizan los 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]
A continuación, sólo hacen referencia a él en su código utilizando 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];
(PS - Esto supone un alfa de 1,0, pero siempre se puede cambiar en la definición).
Disfrútalo.
creé una herramienta en línea para convertir instantáneamente cualquier código hexadecimal a un fragmento de código UIColor de Swift y ObjectiveC, para cuando es incómodo de usar métodos o plugins personalizados: http://ebelinski.com/uihex/
Si la conversión de ObjectiveC a Swift es difícil para ti, esta es 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
}
Encontré una biblioteca de cocoapod muy útil en la creación de UIColor usando los valores "#RRGGBB".
pod 'UIColor-HexRGB'
+(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];
}
- 1. Cómo convertir Hex a RGB?
- 2. Convertir de HEX color a estructura RGB en C
- 3. Cómo convertir de hex a rgb usando Java?
- 4. Convertir System.Drawing.Color a RGB y Hex Value
- 5. Convertir RBG a HEX
- 6. UIColor a hexadecimal (color web)
- 7. ¿Convertir color RGB a CMYK?
- 8. Extrayendo rgb de UIColor
- 9. UIColor de Hex en Monotouch
- 10. convertir color html o rgb a system.drawing.brush
- 11. iOS SDK Interfaz Slider RGB del generador que produce un color diferente a UIColor con RGB
- 12. Obtener nombre de color por HEX o RGB
- 13. cómo convertir nsstring a uicolor?
- 14. Convertir valores RGB al nombre de color
- 15. Java: cómo convertir el color RGB a CIE Lab
- 16. Convertir hex a flotante
- 17. ¿Cómo inicializar UIColor de los valores RGB correctamente?
- 18. color hexadecimal de UIColor
- 19. ¿Existe un complemento de Vim para resaltar Hex, Rgb, Colors
- 20. cómo convertir hexadecimal a RGB
- 21. Convertir Objetos de Color .Net a códigos HEXOS y Atrás
- 22. Tomar un color RGB y normalizarlo con UIColor en el iPhone
- 23. ¿Cómo puedo convertir una cadena hexadecimal RGB en UIColor en Object-C?
- 24. Cómo convertir el "color de fondo" al formato rgb()?
- 25. ¿Cómo convertir un color de cadena a su código hexadecimal o RGB?
- 26. ¿Cómo cambiar el color RGB a HSV?
- 27. Sass/Compass - Convierta Hex, RGB o color con nombre a RGBA
- 28. Convertir RGB a ColorName Cadena Javascript
- 29. Convierta CGcolorRef a UIColor
- 30. Convertir valores RGB a Entero
Si no quiere hacer esto con el código que puede echar un vistazo a [http://uicolor.io/] (http://uicolor.io/). Convierte fácilmente HEX y RGB a UIColor para Swift y Objective-C además hay un selector de color por si acaso ... – manosim
Solo una actualización: la URL de 'http: // uicolor.io /' ha cambiado [http://uicolor.xyz](http://uicolor.xyz) – manosim