ios - 随机着色UIButton如何避免文本(黑色)和背景(白色)颜色?

标签 ios cocoa-touch random uikit

我有一个UIButton,由标题文本和单色背景组成。该按钮绘制在白色的UIView上,标题文本为黑色。

我想在每次启动应用程序时随机给按钮的背景着色。
这是我的实现:

#define KEY_COLOR_R @"KEY_COLOR_R"
#define KEY_COLOR_G @"KEY_COLOR_G"
#define KEY_COLOR_B @"KEY_COLOR_B"

+ (void)setThemeColorRandomly {

    //TODO: THEME COLOR NEEDS TO BE EASILY DISTINGUISHABLE WITH BLACK AND WHITE
    float r = [Helper getRandomFloatBetweenLow:0 high:1];
    float g = [Helper getRandomFloatBetweenLow:0 high:1];
    float b = [Helper getRandomFloatBetweenLow:0 high:1];

    [ModuleHelper cache_setFloat:r forKey:KEY_COLOR_R];
    [ModuleHelper cache_setFloat:g forKey:KEY_COLOR_G];
    [ModuleHelper cache_setFloat:b forKey:KEY_COLOR_B];
}

+ (UIColor *)themeColor {

    float r = [ModuleHelper cache_floatForKey:KEY_COLOR_R];
    float g = [ModuleHelper cache_floatForKey:KEY_COLOR_G];
    float b = [ModuleHelper cache_floatForKey:KEY_COLOR_B];

    return [UIColor colorWithRed:r green:g blue:b alpha:1];
}
+setThemeColorRandomly-didFinishLaunching中被调用

现在我设置颜色:
[self.settingsButton setBackgroundColor:[CacheHelper themeColor]];

问题是,我需要避免颜色太浅(与背景混合)或太暗(与文本混合)的颜色。但我不想限制颜色的多样性,例如如果我将所有3种颜色的范围都设置为0.4-0.6,那么我会错过红色,而白色和黑色很容易区分

编辑:

我需要避免的颜色不仅仅是黑色和白色。我需要避免几乎无法区分的所有颜色。

关键部分是“可区别的”。例如,非常浅的蓝色背景是一个不好的选择。

最佳答案

我建议使用hsb颜色模型,这样您就可以完全控制颜色的亮度:

//set your color randomly
CGFloat hue = [Helper getRandomFloatBetweenLow:0 high:1]; 
//you may play around with the saturation to get more colors as well
CGFloat saturation = 1; 
//adjust your desired min max values
CGFloat brightness = [Helper getRandomFloatBetweenLow:0.3 high:0.7];

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

关于ios - 随机着色UIButton如何避免文本(黑色)和背景(白色)颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856450/

相关文章:

ios - 带有 systemFontOfSize 的新 San Francisco 文本字体

ios - 如何限制 UITableView 行重新排序到一个部分

c - 查找数组中 50 个随机数的平均值 - C 编程

ios - 防止同时按下按钮

ios - Swift 对 Java 的 Runnable 的模拟

ios - 当我触摸 AlertView 上的按钮时如何将光标设置为文本字段

带有偏差的MySQL随机记录

ios - 非 -'@objc' 方法不满足 '@objc' 协议(protocol)的要求

iphone - 一台 iOS (Iphone/iPad/iPod Touch) 设备有多少内存?

python:从二维网格中无替换地采样