2012-12-15 15 views
5

muszę konwertować UIColor do NSString z nazwą koloru tjObjective C UIColor do NSString

[UIColor redColor]; 

powinna stać

@"RedColor" 

Ja już próbowałem [UIColor redColor].CIColor.stringRepresentation ale powoduje błąd kompilatora

+2

Zobacz najlepiej ocenioną odpowiedź tutaj; może pomóc: http://stackoverflow.com/questions/1748350/how-to-convert-uicolor-value-to-nsstring – Luke

+0

Nie możesz robić tego, czego chcesz, bez pisania własnej metody. Odpowiedzi wskazujące, że ludzie zamierzają dać ci coś w rodzaju "1 0 0 1" lub "UIDeviceRGBColorSpace 1 0 0 1". – rdelmar

+0

Jak chcesz uzyskać tę nazwę koloru - czyli w jaki sposób zamierzasz z niej korzystać? – rdelmar

Odpowiedz

9

Po prostu rozwijając odpowiedź, której @Luke powiązał z którym tworzy CGColorRef do przekazania do CIColor:

CGColorRef colorRef = [UIColor grayColor].CGColor; 

Można by zamiast po prostu przekazać własność CGColor z UIColor pracujesz na niczym:

NSString *colorString = [[CIColor colorWithCGColor:[[UIColor redColor] CGColor]] stringRepresentation]; 

Nie zapomnij importować ramy Rdzeń obrazu.

marginesie, to szybki i łatwy sposób przekonwertować z powrotem do UIColor z łańcucha może być coś takiego:

NSArray *parts = [colorString componentsSeparatedByString:@" "]; 
UIColor *colorFromString = [UIColor colorWithRed:[parts[0] floatValue] green:[parts[1] floatValue] blue:[parts[2] floatValue] alpha:[parts[3] floatValue]]; 
+1

To nie da mu "GrayColor", o co prosił. – rdelmar

+0

@rdelmar Interesujące, domyślam się, że przeskoczyłem ten szczegół ... szukając ... –

+2

Próbowałem zarówno tego, jak i łącza, ale oba z nich zwróciły równoważnik rgb + alpha. Chcę znać nazwę koloru, aby [kolor żółtozielony] zwracał kolor biały NOT 1 1 1 – Alex

2

Jest to najkrótsza droga do konwersji UIColor do 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)])]; 
}