Как преобразовать значение UIColor в именованную строку цвета?

Мне нужно преобразовать UIColor в NSString имени цвета.

Я пробовал:

 NSString *colorString = NSStringFromClass([[UIColor redColor] class]); 

Но colorString не дал @ "redColor".

Ответы

Ответ 1

Для чего вы хотите это сделать? Взгляните на общий -desciption метод для запуска

UIColor* someColor = ...//Initialize color
NSString* colorString = [someColor description];

Ответ 2

Класс 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

Ответ 3

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

Ответ 4

Как насчет этого:

- (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}".

Ответ 6

Вот что я использовал для преобразования из формата 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];
}

Ответ 7

Это самый короткий способ преобразования 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)])];
}

Ответ 8

NSString *colorString = (NSString *)YourColor;