【问题标题】:Avoid light color in random UIColor避免随机 UIColor 中的浅色
【发布时间】:2017-02-13 06:09:56
【问题描述】:

我正在生成随机的 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 更改为其他颜色...

【问题讨论】:

    标签: ios objective-c uicolor


    【解决方案1】:

    听起来您想避免接近白色的颜色。由于您已经在 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;
    }
    

    【讨论】:

    • 常量需要使用哪些值(如 kSatThreshold)
    • 这取决于你。当背景为该颜色且文本为白色时,无论您感觉到什么,都足以阅读。我只是试验一下,看看有什么用。我的猜测是 kSatThreshold 应该在 0.25-.5 左右,kBrightnessThreshold 应该在 0.75 左右,但这只是一个猜测。
    • @user1118321 比我懒惰的答案要多得多。赞成。
    【解决方案2】:

    浅色是指具有高亮度(或明度、光度...)的颜色。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多