2010-05-26 22 views
5

¿Cómo puedo generar un hexadecimal de color aleatorio en Objective-C?¿Generar hex de color aleatorio en Objective-C?

Necesito un color hexadecimal, no necesito un color al azar. Es complicado ...

+2

UIColor/NSColor o una cadena '# abcdef'? – kennytm

+0

No necesito un color aleatorio, pero en realidad necesito un hexágono de color (el propósito para el que se usa no está relacionado con el color). –

Respuesta

18

Creo que debería funcionar para usted. Arc4random() es mucho mejor en cuanto a rendimiento & ... precisión que rand(). Rand() también necesita ser sembrado antes de su uso.

// 16777215 is FFFFFF 
NSInteger *baseInt = arc4random() % 16777216; 
NSString *hex = [NSString stringWithFormat:@"%06X", baseInt]; 

Editar: Editado en base al comentario sobre el formateo.

+0

Muchas gracias –

+1

Casi correcto, pero necesitas'% 06X', de lo contrario obtendrás colores como '# AB'. – kennytm

+1

Formatea la cadena como necesitas incluir el # o no. –

5

Usted puede utilizar el estándar C rutina de biblioteca rand() en su aplicación Objective-C. Desde allí, entonces, querrá llamarlo tres veces para obtener valores aleatorios para cada uno de los canales rojo, verde y azul de su color aleatorio. Deberá modificar (%) el valor por el valor máximo que el canal puede tener, típicamente 256. Desde allí puede construir su NSColor de manera apropiada. Así que el código podría ser algo como:

int red = rand() % 255; 
int green = rand() % 255; 
int blue = rand() % 255; 
NSColor* myColor = [NSColor colorWithCalibratedRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0]; 

Debido NSColor lleva flotadores en lugar de números enteros un mejor enfoque sería dividir los valores aleatorios por RAND_MAX desde el principio:

float rand_max = RAND_MAX; 
float red = rand()/rand_max; 
float green = rand()/rand_max; 
float blue = rand()/rand_max; 
NSColor* myColor = [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1.0]; 

Este último código se no limite el número de colores a un espectro de 24 bits.

+0

Sí, pero solo tendrá los valores RGB, no se convertirá en valores hexadecimales y se concatenará (lo que lo convierte en un código de color hexadecimal), que obviamente el OP necesita. –

+0

Sí; Publiqué mi respuesta antes de aclarar exactamente lo que estaba buscando. – fbrereto

+0

Usa aleatorio() no rand(). Los 12 bits bajos de rand() pasan por un patrón cíclico. Además, 'rand()% 255' te da un número en el rango 0 - 254. – JeremyP

0

Sólo por una breve nota:

Dependiendo de sus necesidades, es posible que usted debe considerar para escribir un generador de color no tan al azar. (Por ejemplo, cuando desea configurar "reglas" para la visibilidad de los colores generados). Por lo tanto, es posible que necesite obtener el código de color al limitar los valores generados aleatoriamente en HSB.

Cuestiones relacionadas