2012-12-15 20 views
5

Ich brauche alsoObjective C UIColor zu NSString

[UIColor redColor]; 

sollte

@"RedColor" 

ich schon [UIColor redColor].CIColor.stringRepresentation habe versucht werden eine UIColor zu einem NSString mit dem Namen der Farbe konvertieren aber es verursacht ein Compiler-Fehler

+2

Sehen Sie die bestbewertete Antwort hier; Es kann helfen: http://stackoverflow.com/questions/1748350/how-to-convert-uicolor-value-to-nsstring – Luke

+0

Sie können nicht tun, was Sie wollen, ohne Ihre eigene Methode zu schreiben. Die Antworten, auf die die Leute verweisen, geben dir etwas wie "1 0 0 1" oder "UIDeviceRGBColorSpace 1 0 0 1". – rdelmar

+0

Wie möchten Sie diesen Farbnamen erhalten - also wie werden Sie ihn verwenden? – rdelmar

Antwort

9

Erweitern Sie einfach die Antwort, die @Luke verknüpft, die eine CGColorRef erstellt, um an CIColor übergeben:

CGColorRef colorRef = [UIColor grayColor].CGColor; 

Sie könnten stattdessen einfach die CGColor Eigenschaft des UIColor passieren Sie gerade arbeiten wie:

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

Vergessen Sie nicht, die Core Image Rahmen zu importieren.

Randnotiz, eine schnelle und einfache Art und Weise zu einem UIColor zu konvertieren zurück aus dem String könnte so etwas wie diese:

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

Dies wird ihm nicht "GrayColor" geben, was er verlangte. – rdelmar

+0

@rdelmar Interessant, ich denke, ich überspringe das Detail ... forschen ... –

+2

Ich habe versucht, dies und die Verbindung, aber beide von ihnen die rgb + Alpha-Äquivalent zurückgegeben. Ich möchte den Namen der Farbe wissen, damit [uicolor whitecolor] weiß zurückgab NOT 1 1 1 1 – Alex

2

Dies ist der kürzeste Weg UIColor zu NSString konvertieren:

- (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)])]; 
}