如何生成随机UIColor?

时间:2014-05-19 06:58:38

标签: ios objective-c random uicolor

我试图从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值,因为我只希望它是特定的颜色?

4 个答案:

答案 0 :(得分:2)

使用huesaturationbrightness

获取随机颜色的方式
//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