2017-02-13 11 views
1

ランダムなuicolorを生成しています。私はここに私のコード明るい色をランダムに避けてください。UIColor

+ (UIColor *)generateRandom { 
    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 

    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; 
} 

私はUITableViewCellの背景色のためにこれを使用しています...黄色、薄緑などのような光の色を避けたいです。セルのtextLabelの色は白です。したがって、背景色が明るい緑色またはその他の明るい色の場合は、明瞭に見えません。

これを修正するにはどうすればいいですか?私たちは明るい色の生成を避けることができますか、または明るい色を見つけることができますか?

我々はそれが光の色は、私はいくつかの他の色にtextcolorは変更することができ意味で見つけることができるかどうか...

答えて

0

あなたは白に近い色を避けたいように聞こえます。あなたは既にHSV空間にいるので、これは白からの距離を避けるための単純な問題です。簡単な実装では、彩度と輝度がある閾値より近くにならないように制限されます。

if (saturation < kSatThreshold) 
{ 
    saturation = kSatThreshold; 
} 
if (brightness > kBrightnessThreshold) 
{ 
    brightness = kBrightnessThreshold; 
} 

より洗練されたが、白からの距離を確認し、それはあまりにも近くだ場合、外に戻ってそれをプッシュするだろう何か:

CGFloat deltaH = hue - kWhiteHue; 
CGFloat deltaS = saturation - kWhiteSaturation; 
CGFloat deltaB = brightness - kWhiteBrightness; 
CGFloat distance = sqrt(deltaH * deltaH + deltaS * deltaS + deltaB * deltaB); 
if (distance < kDistanceThreshold) 
{ 
    // normalize distance vector 
    deltaH /= distance; 
    deltaS /= distance; 
    deltaB /= distance; 
    hue = kWhiteHue + deltaH * kDistanceThreshold; 
    saturation = kWhiteSaturation + deltaS * kDistanceThreshold; 
    brightness = kWhiteBrightness + deltaB * kDistanceThreshold; 
} 
+0

kSatThresholdなどの定数に必要な値は –

+0

ですあなた次第。あなたが感じるものは、背景がその色であり、テキストが白である場合には、読めるほど十分です。私はちょうど実験し、何がうまくいくのか見るだろう私の推測では、 'kSatThreshold'は.25-.5のどこかにあり、' kBrightnessThreshold'はおよそ.75であるはずですが、それは単なる推測です。 – user1118321

+0

@ user1118321私の怠惰な返事よりもずっとベタです。 Upvoted。 –

0

ライトの色は高輝度(または明るさを有するものである、のようなもの光度...)。

ランダムな色相と彩度で色を生成しますが、明るさのランダム性を0〜0.5のように低い数値に制限します。または、明るさを一定に保つ。色を並べて表示している場合、HSB(HSV、HSL)の3つのコンポーネントのうち2つだけを変更すると、審美的な影響が通常より良くなります

関連する問題