Мне нужно преобразовать UIColor в NSString имени цвета.
UIColor
NSString
Я пытался:
NSString *colorString = NSStringFromClass([[UIColor redColor] class]);
Но colorString не дал @ "redColor".
colorString
Класс CIColor содержит значения цвета и цветовое пространство, для которого допустимы значения цвета.
CIColor
https://developer.apple.com/documentation/coreimage/cicolor
// UIColor to NSString CGColorRef colorRef = [UIColor grayColor].CGColor; NSString *colorString = [CIColor colorWithCGColor:colorRef].stringRepresentation;
// NSString to UIColor CIColor *coreColor = [CIColor colorWithString:@"0.5 0.5 0.5 1.0"]; UIColor *color = [UIColor colorWithCIColor:coreColor];
----------------- Предупреждение -----------
Если вы хотите поддерживать все устройства, способ преобразования NSString в UIColor, указанный выше, не будет работать на всех устройствах.
stringRepresentation
Возвращает отформатированную строку, которая определяет компоненты цвета.
Строковое представление всегда имеет четыре компонента - красный, зеленый, синий и альфа.
https://developer.apple.com/documentation/coreimage/cicolor/1437910-stringrepresentation
colorWithString:
Создает объект цвета, используя значения компонента цвета RGBA, заданные строкой.
https://developer.apple.com/documentation/coreimage/cicolor/1438059-colorwithstring
UIColor *color = value; const CGFloat *components = CGColorGetComponents(color.CGColor); NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];
Готово.
Если вы хотите преобразовать строку обратно в объект UIColor:
NSArray *components = [colorAsString componentsSeparatedByString:@","]; CGFloat r = [[components objectAtIndex:0] floatValue]; CGFloat g = [[components objectAtIndex:1] floatValue]; CGFloat b = [[components objectAtIndex:2] floatValue]; CGFloat a = [[components objectAtIndex:3] floatValue]; UIColor *color = [UIColor colorWithRed:r green:g blue:b alpha:a];
Храните ли вы объект UIColor как атрибут в Базовых данных? Если это так, проверьте мой ответ на этот вопрос: Модель данных базовых данных: тип атрибута для UIColor
Для чего вы хотите это сделать? Взгляните на общий -desciption метод для начала
-desciption
UIColor* someColor = ...//Initialize color NSString* colorString = [someColor description];
Попробуй это. Лучшее решение для моей проблемы. Может помочь вам, ребята ..
https://github.com/daniel-beard/DBColorNames
Как насчет этого:
- (NSString *)stringForColor:(UIColor *)color { CGColorRef c = color.CGColor; const CGFloat *components = CGColorGetComponents(c); size_t numberOfComponents = CGColorGetNumberOfComponents(c); NSMutableString *s = [[[NSMutableString alloc] init] autorelease]; [s appendString:@"{"]; for (size_t i = 0; i < numberOfComponents; ++i) { if (i > 0) { [s appendString:@","]; } [s appendString:[NSString stringWithFormat:@"%f", components[i]]]; } [s appendString:@"}"]; return s; }
Например, stringForColor:[UIColor greenColor] имеет результат "{0.000000,1.000000,0.000000,1.000000}".
stringForColor:[UIColor greenColor]
Это самый короткий способ конвертировать UIColor в NSString:
- (NSString *)stringFromColor:(UIColor *)color { const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor); const CGFloat * components = CGColorGetComponents(color.CGColor); return [NSString stringWithFormat:@"#%02X%02X%02X", (int)(255 * components[MIN(0,totalComponents-2)]), (int)(255 * components[MIN(1,totalComponents-2)]), (int)(255 * components[MIN(2,totalComponents-2)])]; }
Вот что я использовал для преобразования из CGColor в формат NSString #RRGGBBAA:
// Return the parsed core graphics color as a "#RRGGBBAA" string value + (NSString*) cgColorToString:(CGColorRef)cgColorRef { const CGFloat *components = CGColorGetComponents(cgColorRef); int red = (int)(components[0] * 255); int green = (int)(components[1] * 255); int blue = (int)(components[2] * 255); int alpha = (int)(components[3] * 255); return [NSString stringWithFormat:@"#%0.2X%0.2X%0.2X%0.2X", red, green, blue, alpha]; }