2014-09-23 244 views
0

在我的應用程序,我隨機通過下面的函數產生一個顏色:隨機生成顏色類似的另一種顏色

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價值,產生一個小的隨機數,並隨機選擇添加或減去它,形成一種新的顏色。然後重複​​和blue的過程。然後我可以重新組裝新的相似顏色。

在以下代碼中,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]; 

我與上面遇到的問題是,它是產生新的顏色是比原來的顏色截然不同。原來的顏色是綠色的陰影,新的顏色是明亮的紫色。當我的價值觀,我越來越瘋狂的數字,所以顯然有些事情會出錯。

提前致謝!

+0

發佈的代碼有什麼問題?你解釋你想要的,你張貼代碼,但你沒有說明問題是什麼。 – rmaddy 2014-09-23 20:25:42

+0

剛更新了它。 – Andrew 2014-09-23 20:28:46

+3

你需要澄清你的意思是「相似的顏色」。簡單地移動RGB值幾乎意味着顏色不會相似,除非您只更改其中的一個。您可能會更喜歡使用HSB值。也許色調的微小變化,然後飽和度和亮度的變化會更好地適合您的「相似」的定義。 – rmaddy 2014-09-23 20:31:52

回答

0

您有

float x = (20-counter)/10; 

給定的計數器是一個int,(20-計數器)/ 10只能是0,1或2。 你必須添加類型鑄:

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

或更容易

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