Как преобразовать значение UIColor в именованную строку цвета? - PullRequest
16 голосов
/ 17 ноября 2009

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

Я пытался:

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

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

Ответы [ 7 ]

32 голосов
/ 04 февраля 2012

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

17 голосов
/ 03 июля 2010
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

10 голосов
/ 17 ноября 2009

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

UIColor* someColor = ...//Initialize color
NSString* colorString = [someColor description];
5 голосов
/ 06 апреля 2015

Попробуй это. Лучшее решение для моей проблемы. Может помочь вам, ребята ..

https://github.com/daniel-beard/DBColorNames

4 голосов
/ 17 ноября 2009

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

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

0 голосов
/ 06 марта 2013

Это самый короткий способ конвертировать 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)])];
}
0 голосов
/ 01 апреля 2012

Вот что я использовал для преобразования из 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...