17 ответов:
в каком-то моем коде, Я использую 2 различных функции:
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; } }и тогда я использую его так:
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]; }если вы предпочитаете использовать это как
UIColorкатегория, то это просто вопрос изменения нескольких строк:+ (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]; }это будет обрабатывать строки вроде "#Азбука", "#abcdef31" и т. д.
Если вы используете шестнадцатеричные значения..
#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);
Я искал простое решение и придумал это (не совсем объективно-C, но работает как шарм):
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];
есть хорошая категория для UIColor называется "UIColor + Expanded" который имеет метод класса для получения UIColor из шестнадцатеричной строки RGB:
Он прост в использовании:
UIColor *myColor = [UIColor colorWithHexString:@"FF0000"];плюс он добавляет много других потенциально полезных утилит для UIColor. Дополнительная информация доступна в в этой статье.
легко, просто зайдите на этот сайт и введите шестнадцатеричное значение: http://www.corecoding.com/utilities/rgb-or-hex-to-float.php
+ (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; }для формата #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]; }для формата 0xfff195
самый простой способ, который я нашел:шестнадцатеричный конвертер в UIColor
просто введите шестнадцатеричное число Без'#', и он возвращает код UIColor. Например, код для оранжевого цвета (#f77f00):
[UIColor colorWithRed:0.969 green:0.498 blue:0 alpha:1.0]
Я думаю, что разделил бы шесть символов на три пары, а затем преобразовал бы их в десятичные, а затем разделил бы их на 255, чтобы получить каждый компонент цвета в виде поплавка.
затем вы можете пройти компонентов:
[UIColor colorWithRed: green: blue: alpha:1];
Если вы не хотите писать весь этот код выше, вы можете проверить этот сайт:http://www.diovo.com/apps/rgb-to-uicolor-converter.html
Из шестнадцатеричного цвета, как это: #FFFFFF, сайт преобразовать его в строку, как это:UIColor *aColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.000];
Не забывайте, что у вас есть возможность преобразовать шестнадцатеричные значения в RGB и введите их в построитель интерфейса. Это сохранит некоторые строки кода.
думаю, это немного поздно здесь... но я нашел эту версию в репо WhiteHouse Github, которая делает это довольно элегантно:
+(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 для Swift и Objective - C, когда неудобно использовать пользовательские методы или плагины:http://ebelinski.com/uihex/
если преобразование из ObjectiveC в swift трудно для вас, вот ответ с Swift. В настоящее время он принимает только строки без #, но вы можете добавить метод сканирования, чтобы пропустить его, я считаю.
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)/255, green: CGFloat((hexInt & 0xFF00) >> 8)/255, blue: CGFloat((hexInt & 0xFF))/255, alpha: 1) return color }
в итоге я создал категорию для
UIColorчто я могу просто повторно использовать в других проектах. Github:https://github.com/mattquiros/UIColorHexColorиспользование идет как:
UIColor *customRedColor = [UIColor colorFromHex:0x990000];это намного быстрее, чем передача строки и преобразование ее в число, а затем смещение битов. Вы также можете импортировать категорию из вашего Так что вы можете легко использовать
colorFromHexвезде в вашем приложении, как это встроено вUIColor:#ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> // Your other stuff here... #import "UIColor+HexColor.h" #endif
Я думаю, что есть еще более простой способ при использовании шестнадцатеричных значений. Просто добавьте определение в верхней части файла или ссылку на файл заголовка для преобразования (UIColorFromRGB). Вы даже можете добавить шаблон фиксированных шестнадцатеричных значений цвета.
#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]затем просто ссылайтесь на него в своем коде, используя шестнадцатеричные значения напрямую или ваши определенные шестнадцатеричные значения. Например...
[myButton1 setTitleColor:UIColorFromRGB(0xd02d2d) forState:UIControlStateNormal]; [myButton2 setTitleColor:UIColorFromRGB(CLR_GREEN_TEXT) forState:UIControlStateNormal]; [myButton3 setTitleColor:UIColorFromRGB(CLR_YELLOW_TEXT) forState:UIControlStateNormal];(PS-это предполагает Альфа 1.0, но он всегда может быть изменен в определение.)
наслаждайтесь.
Я нашел библиотеку cocoapod очень полезной при создании UIColor с использованием значений "#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];}

Comments