2012-12-15 6 views
5

Ho bisogno di convertire un UIColor a un NSString con il nome del colore cioèObjective C UIColor a NSString

[UIColor redColor]; 

dovrebbe diventare

@"RedColor" 

Ho già provato [UIColor redColor].CIColor.stringRepresentation ma causa un errore del compilatore

+2

Vedere la risposta più votata qui; può aiutare: http://stackoverflow.com/questions/1748350/how-to-convert-uicolor-value-to-nsstring – Luke

+0

Non puoi fare ciò che vuoi senza scrivere il tuo metodo. Le risposte che le persone ti indicano ti daranno qualcosa come "1 0 0 1" o "UIDeviceRGBColorSpace 1 0 0 1". – rdelmar

+0

Come si desidera ottenere questo nome di colore, ovvero come lo si utilizzerà? – rdelmar

risposta

9

Semplicemente espandendo la risposta che @Luke ha collegato a cui crea un CGColorRef da passare a CIColor:

CGColorRef colorRef = [UIColor grayColor].CGColor; 

Si potrebbe invece semplicemente passare la proprietà CGColor del UIColor cui stai lavorando come:

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

Non dimenticare di importare il quadro Core Image.

Nota a margine, un modo semplice e veloce per convertire di nuovo ad un UIColor dalla stringa potrebbe essere qualcosa di simile:

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

Questo non gli darà "GrayColor", che è quello che ha chiesto. – rdelmar

+0

@rdelmar Interessante, immagino di aver saltato quel dettaglio ... ricercando ... –

+2

Ho provato sia questo che il link ma entrambi hanno restituito l'equivalente alfa + rgb. Voglio sapere il nome del colore in modo che [unicolorumoloricolore] restituisca il bianco NOT 1 1 1 1 – Alex

2

Questa è la strada più breve per convertire UIColor a 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)])]; 
}