如何在Objective-C中生成随机颜色十六进制?
我需要一个十六进制颜色,我不需要随机颜色。这很复杂......
答案 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中随机生成的值来获取颜色代码。