2009-11-17 6 views
14

Devo convertire UIColor in un NSString del nome del colore.Come convertire il valore UIColor in una stringa di colori con nome?

ho provato:

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

Ma colorString non ha dato @ "redcolor".

+0

Quale formato si desidera che il risultante NSString di avere? Che cosa hai intenzione di fare con quella stringa? (Visualizza per utente, salva in file, ...) –

+1

hi, ad esempio ... whiteColor .. Voglio convertirlo in stringa Tipo di dati ..... @ "whiteColor" ...? –

+0

voglio convertire in UTF8String ..? Qualche aiuto ..? –

risposta

10

Per che cosa vuoi farlo? Date un'occhiata al metodo generico -desciption per un inizio

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

Questa soluzione funziona perfettamente nel debugger XCode (come da XCode 4.6.3). –

+1

Non funziona restituisce invece RGBa 'Colore che sto per utilizzare è -> UIDeviceRGBColorSpace 1 0 0 1' –

+0

si ottiene una stringa di debug. non il valore di stringa del colore –

4

ne dite di questo:

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

Per esempio, stringForColor:[UIColor greenColor] ha il risultato "{} 0.000000,1.000000,0.000000,1.000000".

+0

In realtà, -descrizione restituisce lo stesso + Informazioni sullo spazio colore – Vladimir

+0

Sì, ma -descrizione include anche il nome della classe, che può essere o non essere desiderabile (l'interrogante non dice quello che vuole la stringa per Assomiglia a). –

17
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]]; 

Fatto.

Se si desidera convertire la stringa di nuovo a un oggetto 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]; 

State memorizzazione di un oggetto UIColor come un attributo in Core Data? Se è così, date un'occhiata al mio risposta a questa domanda: Core Data data model: attribute type for UIColor

+0

Qualche informazione su come convertire questa stringa in uicolor? :) –

+0

Ciao, non funziona con 'whiteColor'. – Maulik

32

La classe CIColor contiene i valori di colore e lo spazio colore per i quali i valori di colore sono validi.

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]; 

----------------- Attenzione -----------

Se si desidera supportare tutti i dispositivi La modalità menzionata sopra per convertire NSString in UIColor non funzionerà su tutti i dispositivi.


stringRepresentation

Restituisce una stringa formattata che specifica i componenti del colore.

La rappresentazione della stringa ha sempre quattro componenti: rosso, verde, blu e alfa.

https://developer.apple.com/documentation/coreimage/cicolor/1437910-stringrepresentation


colorWithString:

Crea un oggetto colore utilizzando i valori dei componenti del colore RGBA specificati da una stringa.

https://developer.apple.com/documentation/coreimage/cicolor/1438059-colorwithstring

+2

Non sono sicuro del motivo per cui questa risposta ha così tanti voti positivi. Non è corretto. 'stringRepresentation' restituisce una stringa formattata con i componenti del colore, non il nome del colore che è quello che l'OP chiedeva. – memmons

+0

Ha fornito due esempi, 'colorString non ha dato @" redColor "' e 'ad esempio ... whiteColor'. – memmons

+1

Grazie! Esattamente quello che stavo cercando. – Shantanu

-9
NSString *colorString = (NSString *)YourColor; 
0

Ecco quello che ho usato per convertire da CGColor a NSString formato #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]; 
} 
+2

fare attenzione con questo perché si presume che il colore sia nello spazio cromatico RGB, il che non è necessariamente il caso. Ad esempio, UIColor.Black.CGColor si trova nello spazio colore grigio e ha solo due componenti (intensità e alfa). –

0

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

C'è una virgola mancante sulla penultima riga. – Womble

+0

@Womble grazie! – k06a

5

Prova questo. La migliore soluzione per il mio problem.Might aiuto voi ragazzi anche ..

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

+3

Questa è una scoperta incredibile, e se il nome del colore è quello che l'OP sta chiedendo, forse questa dovrebbe essere la risposta accettata. –

+1

Questa dovrebbe essere la risposta accettata. Se vuoi una descrizione di un colore rivolta all'utente, questa è la strada da percorrere. –

+0

Questa è stata la soluzione più utile. –

Problemi correlati