Comment puis-je créer un UIColor
partir d'un format de chaîne hexadécimal, tel que #00FF00
?
Réponses
Trop de publicités?J’ai une solution qui est 100 % compatible avec les chaînes de format hexadécimal utilisés par Android, ce que j’ai trouvé très utile lorsque vous effectuez le développement mobile multiplateforme. Il me permet d’utiliser un palais de couleur pour les deux plates-formes. N’hésitez pas à réutiliser sans attribution, ou sous licence Apache, si vous préférez.
Il y a un joli post sur la façon de s'attaquer à l'OP de la question de l'extraction d'une UIColor à partir d'une chaîne hexadécimale. La solution présentée ci-dessous est différent des autres car il prend en charge les valeurs de chaîne qui peut inclure '0x' ou '#' précédé de la chaîne hexadécimale de la représentation... (voir utilisation)
Voici les principaux bits..
- (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha
{
// Convert hex string to an integer
unsigned int hexint = [self intFromHexString:hexStr];
// Create color object, specifying alpha as well
UIColor *color =
[UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255
green:((CGFloat) ((hexint & 0xFF00) >> 8))/255
blue:((CGFloat) (hexint & 0xFF))/255
alpha:alpha];
return color;
}
Méthode d'aide..
- (unsigned int)intFromHexString:(NSString *)hexStr
{
unsigned int hexInt = 0;
// Create scanner
NSScanner *scanner = [NSScanner scannerWithString:hexStr];
// Tell scanner to skip the # character
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]];
// Scan hex value
[scanner scanHexInt:&hexInt];
return hexInt;
}
Utilisation:
NSString *hexStr1 = @"123ABC";
NSString *hexStr2 = @"#123ABC";
NSString *hexStr3 = @"0x123ABC";
UIColor *color1 = [self getUIColorObjectFromHexString:hexStr1 alpha:.9];
NSLog(@"UIColor: %@", color1);
UIColor *color2 = [self getUIColorObjectFromHexString:hexStr2 alpha:.9];
NSLog(@"UIColor: %@", color2);
UIColor *color3 = [self getUIColorObjectFromHexString:hexStr3 alpha:.9];
NSLog(@"UIColor: %@", color3);
Il n’y a aucune conversion de builtin d’une chaîne hexadécimale à un UIColor (ou CGColor) que je connais. Toutefois, vous pouvez facilement écrire un couple de fonctions à cet effet - par exemple, voir développement iphone pour accéder aux composants uicolor