随机生成与另一种颜色相似的颜色

时间:2014-09-23 20:18:06

标签: ios objective-c uicolor arc4random

在我的应用中,我通过以下功能随机生成一种颜色:

UIColor *origionalRandomColor = [UIColor
                                   colorWithRed:arc4random_uniform(255) / 255.0
                                   green:arc4random_uniform(255) / 255.0
                                   blue:arc4random_uniform(255) / 255.0
                                   alpha:1.0];

我想生成与上面相似的颜色,也是随机的。我想使用常量来确定新颜色与旧颜色的相似程度。

我一直试图通过首先获取red值,生成一个小的随机数,并随机选择添加或减去它来形成新颜色来尝试这样做。然后重复greenblue的流程。然后我可以重新组装新的相似颜色。

在以下代码中,counterint。当counter为1时,我希望差异比计数器为20时更明显。

我试图这样做:

CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
[origionalRandomColor getRed:&red green:&green blue:&blue alpha:&alpha];


//Randomly generates a 0 or 1
//0 results in subtracting - 1 results in adding the value
int AddSubtract = arc4random() %2;

//    double val = 20 - couter;
//    val = val/10 - 1;
//    if (val < .2) {
//        val = .2;
//    }

//    float x = (arc4random() % 100)/(float)100;
//    NSLog(@"**********%f", x);
//    x = x/((float)counter/100);
//    NSLog(@"----------%f", x);

float x = (20-counter)/10;
NSLog(@"----------%f", x);


if (AddSubtract == 0)   //subtract the val
    red -= x;
else                    //add the val
    red += x;

//Then repeated for green/blue

UIColor *newColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];

我遇到的问题是,它产生的新颜色与原始颜色完全不同。原始颜色为绿色,新颜色为亮紫色。当我NSLog价值观时,我会得到疯狂的数字,所以很明显会出现问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

你有

float x = (20-counter)/10;

给定计数器是一个int,(20-计数器)/ 10只能是0,1或2。 你必须添加一个类型转换:

float x = (float)(20-counter) / 10;

或更容易

float x = (20f - counter) / 10f;