在Objective-C中生成随机颜色十六进制?
如何在Objective-C中生成随机颜色十六进制在Objective-C中生成随机颜色十六进制?,objective-c,cocoa,Objective C,Cocoa,如何在Objective-C中生成随机颜色十六进制 我需要一种颜色,我不需要随机颜色。这很复杂…有一篇关于cocoadev的文章(包括代码示例)介绍如何编写屏幕保护程序-使用随机颜色: 您可以在Objective-C应用程序中使用标准C库例程rand()。然后,您需要调用它三次,以获得随机颜色的每个红色、绿色和蓝色通道的随机值。您需要将(%)值调整为频道可以拥有的最大值-通常为256。在此基础上,您可以适当地构建NSColor。因此,您的代码可能类似于: int red = rand() %
我需要一种颜色,我不需要随机颜色。这很复杂…有一篇关于cocoadev的文章(包括代码示例)介绍如何编写屏幕保护程序-使用随机颜色:
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位光谱。我认为应该适合您。Arc4random()在性能方面要好得多&。。。准确度高于兰德()。Rand()也需要在使用前播种
// 16777215 is FFFFFF
NSInteger *baseInt = arc4random() % 16777216;
NSString *hex = [NSString stringWithFormat:@"%06X", baseInt];
编辑:根据有关格式的注释进行编辑。仅作简短说明:
根据你的需要,你可以考虑写一个不那么随机的颜色生成器。(例如,当您想要为生成的颜色的可见性设置“规则”时。)因此,您可能需要通过限制HSB中随机生成的值来获取颜色代码。UIColor/NSColor或a
#abcdef
字符串?我不需要随机颜色,但实际上我需要颜色十六进制(它的用途与颜色无关)。是的,但你只会得到RGB值-它不会转换为十六进制值并连接(使其成为十六进制颜色代码),这是OP显然需要的。是的;在他明确说明他想要什么之前,我发布了我的答案。使用random()而不是rand()。rand()的低12位通过循环模式。此外,rand()%255
给你一个0-254范围内的数字。几乎正确,但你需要%06X
,否则你会得到像#AB
这样的颜色。根据你是否需要包含#来格式化字符串。+1我知道16777215==0xFFFFFF,但最好是arc4random()%0xFFFFFF
,只是为了更清楚地知道这个数字的来源。@Dave:arc4random()%0xFFFFFF
将给出0到0xFFFFFE
范围内的整数。同意Kenny的意见,您应该使用arc4random()%0x1000000