随机UIColor避免浅色

时间:2017-02-13 06:09:57

标签: ios objective-c 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背景色。 Cell的textLabel颜色为白色。因此,如果背景颜色为浅绿色或其他一些浅色,则不能清晰显示...

如何解决这个问题?我们可以避免产生浅色,还是可以找到浅色?

如果我们发现它是浅色的意味着我可以将textcolor更改为其他颜色......

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

浅色是具有高亮度(或亮度,亮度......)的颜色。

生成具有随机色调和饱和度的颜色,但将亮度的随机性限制为较低的数字,如0到0.5。或保持亮度不变。如果您并排显示颜色,如果您只更改HSB中的3个组件中的2个(HSV,HSL),则美学影响通常会更好