Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C中生成随机颜色十六进制?_Objective C_Cocoa - Fatal编程技术网

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

在Objective-C中生成随机颜色十六进制?,objective-c,cocoa,Objective C,Cocoa,如何在Objective-C中生成随机颜色十六进制 我需要一种颜色,我不需要随机颜色。这很复杂…有一篇关于cocoadev的文章(包括代码示例)介绍如何编写屏幕保护程序-使用随机颜色: 您可以在Objective-C应用程序中使用标准C库例程rand()。然后,您需要调用它三次,以获得随机颜色的每个红色、绿色和蓝色通道的随机值。您需要将(%)值调整为频道可以拥有的最大值-通常为256。在此基础上,您可以适当地构建NSColor。因此,您的代码可能类似于: int red = rand() %

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


我需要一种颜色,我不需要随机颜色。这很复杂…

有一篇关于cocoadev的文章(包括代码示例)介绍如何编写屏幕保护程序-使用随机颜色:


您可以在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位光谱。

我认为应该适合您。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