我该如何在Objective-C中生成随机颜色的十六进制代码?
我需要一个颜色的十六进制代码,不需要随机颜色。这比较复杂...
我该如何在Objective-C中生成随机颜色的十六进制代码?
我需要一个颜色的十六进制代码,不需要随机颜色。这比较复杂...
我认为这对你有用。Arc4random()在性能和准确性方面比rand()更好。Rand()在使用前还需要种子。
// 16777215 is FFFFFF
NSInteger *baseInt = arc4random() % 16777216;
NSString *hex = [NSString stringWithFormat:@"%06X", baseInt];
编辑:根据格式的评论进行了编辑。
%06X
,否则你会得到像 #AB
这样的颜色。 - kennytmarc4random() % 0xFFFFFF
。 - Dave DeLongarc4random()
,它比 rand()
或 random()
更好的伪随机数生成器,但在单元测试情况下,你必须设置一个种子的事实实际上是一个优势,因为这意味着你可以重复生成完全相同的数字序列。 - JeremyP在你的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];
rand()%255
可以为您提供0-254范围内的数字。 - JeremyP仅供简短记录:
根据您的需求,您可能需要考虑编写一个不太随机的颜色生成器。(例如,当您想要为生成的颜色设置“规则”时。)因此,您可能需要通过限制HSB中的随机生成值来获取颜色代码。
#abcdef
的字符串? - kennytm