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

时间:2010-05-26 16:01:43

标签: objective-c cocoa

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

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

4 个答案:

答案 0 :(得分:18)

我觉得应该适合你。 Arc4random()在性能方面要好得多。 ......精确度比兰德()。 Rand()也需要在使用前播种。

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

编辑:根据有关格式的评论进行编辑。

答案 1 :(得分:5)

您可以在Objective-C应用程序中使用标准C库例程rand()。然后,从那里开始,您需要调用它三次,以获得随机颜色的每个红色,绿色和蓝色通道的随机值。您需要通过通道可以具有的最大值(通常为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];

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

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

答案 2 :(得分:0)

有关于编写屏幕保护程序的cocoadev(包括代码示例)的文章 - 随机颜色:

答案 3 :(得分:0)

只是为了简短说明:

根据您的需要,您可能会考虑编写一个不那么随机的颜色生成器。 (例如,当想要为生成的颜色的可见性设置“规则”时。)因此,您可能需要通过限制HSB中随机生成的值来获取颜色代码。