在Objective-C中生成随机颜色十六进制?

Kri*_*oks 5 cocoa objective-c

如何在Objective-C中生成随机颜色十六进制?

我需要一个十六进制的颜色,我不需要随机颜色.这很复杂 ...

Mat*_*t S 18

我认为应该适合你.Arc4random()在性能和精度方面要比rand()好得多.Rand()也需要在使用前播种.

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

编辑:根据有关格式的注释进行编辑.

  • +1我知道16777215 == 0xFFFFFF,但是`arc4random()%0xFFFFFF`可能更好,只是这个数字来自哪里更明显. (3认同)

fbr*_*eto 6

您可以rand()在Objective-C应用程序中使用标准C库例程.然后,从那里开始,您需要调用它三次,以获得随机颜色的每个红色,绿色和蓝色通道的随机值.你需要%通过通道可以拥有的最大值(通常为256)来修改()值.从那里你可以NSColor适当地构建你.所以你的代码可能看起来像:

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];
Run Code Online (Sandbox Code Playgroud)

因为NSColor采用浮点数而不是整数,所以更好的方法是从开始就将随机值除以RAND_MAX:

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];
Run Code Online (Sandbox Code Playgroud)

后一种代码不会将颜色数量限制为24位频谱.