Ответ 1
Для чего вы хотите это сделать? Взгляните на общий -desciption
метод для запуска
UIColor* someColor = ...//Initialize color
NSString* colorString = [someColor description];
Мне нужно преобразовать UIColor
в NSString
имени цвета.
Я пробовал:
NSString *colorString = NSStringFromClass([[UIColor redColor] class]);
Но colorString
не дал @ "redColor".
Для чего вы хотите это сделать? Взгляните на общий -desciption
метод для запуска
UIColor* someColor = ...//Initialize color
NSString* colorString = [someColor description];
Класс 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 как атрибут в Core Data? Если да, проверьте мой ответ на этот вопрос: Модель данных основных данных: тип атрибута для UIColor
Как насчет этого:
- (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}".
Попробуйте это. Лучшее решение для моей проблемы. Помогите вам, ребята, также..
Вот что я использовал для преобразования из формата 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];
}
Это самый короткий способ преобразования 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)])];
}
NSString *colorString = (NSString *)YourColor;