2012-04-24 16 views
10

Desidero creare UIColor dal valore HEX. Ma il mio colore è una NSString. Così ho implementare questa soluzione: How can I create a UIColor from a hex string?Valore HEX in Objective-C

codice:

#define UIColorFromRGB(rgbValue) [UIColor \ 
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ 
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ 
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 

E poi ho (semplificare):

NSString *myString = [[NSString alloc] initWithString:@"0xFFFFFF"]; 

Così quando voglio chiamare macro:

UIColor *myColor = UIColorFromRGB(myString); 

Viene visualizzato un messaggio di errore: invalid operands to binary expression ('NSString *' and 'int')

Quindi so che devo passare int, ma come convertire NSString in int in questo caso? Ovviamente [myString intValue]; non funziona qui.

risposta

17

È possibile utilizzare la macro direttamente con numeri interi esadecimali come questo:

UIColorFromRGB(0xff4433) 

Oppure si può analizzare la hex-stringa in un intero come questo:

unsigned colorInt = 0; 
[[NSScanner scannerWithString:hexString] scanHexInt:&colorInt]; 
UIColorFromRGB(colorInt) 
+0

funziona benissimo! Grazie! – Kuba

5

Non è possibile farlo come standard ma controlla il mio category on UIColor che ha un metodo per farlo.

La macro che hai definito si aspetta che sia un intero imballato in formato RGB. Stai trasmettendo una stringa, motivo per cui non funziona.