我试图从8个选项中生成随机颜色。我发现的所有堆栈溢出帖子/教程都是随机颜色。在我的prefix.pch中,我定义了8组不同的颜色定义,这是一个例子:
#define cola1 209/255.
#define colb1 0/255.
#define colc1 0/255.
#define cold1 1.0/255.
为cola1-8,colb1-8,colc1-8和cold1-8定义不同的颜色值。
然后我设置了一个随机数生成器:
int randomNumber;
randomNumber = arc4random() %8;
randomNumber = randomNumber + 1;
whatRandomNumberIs = randomNumber;
然后我尝试在[NSString stringWithFormat:@"cola%i", randomNumber];
[UIColor colorWithRed etc]
像这样:
[UIColor colorWithRed:[NSString stringWithFormat:@"cola%i", whatRandomNumberIs] green:[NSString stringWithFormat:@"colb%i", whatRandomNumberIs] blue:[NSString stringWithFormat:@"colc%i", whatRandomNumberIs] alpha:[NSString stringWithFormat:@"cold%i", whatRandomNumberIs]];
但后来意识到你不能在NSString
中加CGFloat
。
所以现在我被卡住了。如何在不执行NSString stringWithFormat的情况下在红色,绿色,蓝色和alpha值内安装1-8的随机数?是否有另一种方法可以返回定义的随机UIColor值,因为我只希望它是特定的颜色?
答案 0 :(得分:2)
使用hue
,saturation
和brightness
//random color
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
答案 1 :(得分:2)
以下是你可以做的......
在prefix.pch
中,您有以下内容。
#define colorCombination1 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination2 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination3 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination4 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination5 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination6 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination7 [UIColor colorWithRed:.... alpha:1.0];
#define colorCombination8 [UIColor colorWithRed:.... alpha:1.0];
现在你创建这种颜色的数组..
NSArray *myColorArray = [[NSArray alloc] initWithObjects:colorCombination1, colorCombination2, colorCombination3, colorCombination4, colorCombination5, colorCombination6, colorCombination7, colorCombination8, nil];
现在你得到随机数字变量为generatedRandomNumber
。
UIColor *myRandomColor = [myColorArray objectAtIndex:generatedRandomNumber%8];
generatedRandomNumber%8
会向您提供generatedRandomNumber
的剩余部分。
希望这就是你想要的。
答案 2 :(得分:1)
您正在尝试在运行时构造一个字符串,然后将其用作在编译时定义的宏的名称。这不起作用。在运行时没有关于编译时宏名称的信息。
这是从编译时定义的集合中选择随机颜色的一种正确方法。在UIColor
上的类别中定义一种返回随机颜色的方法:
@interface UIColor (Liam_RandomColor)
+ (UIColor *)Liam_randomColor;
@end
首先实现方法(仅一次)初始化预定义颜色的数组,然后第二次(每次)实现随机返回数组元素:
@implementation UIColor (Liam_RandomColor)
+ (UIColor *)Liam_randomColor {
static dispatch_once_t onceToken;
static NSArray *colors;
dispatch_once(&onceToken, ^{
colors = @[
[UIColor colorWithRed:209/255.0 green:0 blue:0 alpha:1/255.0],
[UIColor colorWithRed:50/255.0 green:100/255.0 blue:100/255.0 alpha:1],
// etc.
];
});
return colors[arc4random_uniform(colors.count)];
}
@end
答案 3 :(得分:0)
您可以在UIColor上创建一个类别,并将预定义的颜色包装在一个方法中,类似于:
@interface UIColor (myCategory)
+ (UIColor *)randomColorForInt(int n);
@end
@implementation
+ (UIColor *)randomColorForInt(int n) {
if (n == 0) {
return [UIColor colorWithRed:cola1 green:colb1 blue:colc1 alpha:cold1]];
}
...
}
@end