我有一个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/