创建一个不透明的UIColor,它与另一个半透明的UIColor相同

时间:2014-04-30 23:54:48

标签: cocoa-touch colors alpha uicolor

此颜色

[UIColor colorWithRed:75.0/255.0 
                green:215.0/255.0
                 blue:100.0/255.0 
                alpha:0.5]

和这个,具有不同的RGB值且没有透明度,

[UIColor colorWithRed:165.0/255.0 
                green:235.0/255.0 
                 blue:177.0/255.0 
                alpha:1]

在白色背景上看起来完全相同。

如何从第一个UIColor转到第二个UIColor

2 个答案:

答案 0 :(得分:5)

嗯,答案将特别依赖于了解背景颜色。假设backgroundColorsourceColor是UIColors:

,这样的事情就行了
float blend(float src, float srcAlpha, float background) {
  return (background + src * srcAlpha) / 2;
}
UIColor *result = [UIColor colorWithRed:blend([sourceColor red], [sourceColor alpha], [backgroundColor red])
                                    green:blend([sourceColor green], [sourceColor alpha], [backgroundColor green])
                                    blue:blend([sourceColor blue], [sourceColor alpha], [backgroundColor blue])
                                    alpha:1.0f];

虽然数字不等于你的例子,但这是一个合理的混合函数,它是通用的。没有更多的例子,很难知道你的例子的曲线是什么。您正在使用的混合功能似乎对每个颜色分量使用不同的比例,或者您可能会根据屏幕的颜色配置文件调整结果颜色值的测量值。

答案 1 :(得分:0)

NilObject的答案很好,但我最终使用了一些更具体的问题。

我想要不同色调的基色是:

cell.backgroundColor = [UIColor colorWithRed:75.0/255.0 green:215.0/255.0 blue:100.0/255.0 alpha:1];

这是我的解决方案:

cell.backgroundColor = [UIColor colorWithRed:1 - (255-75)*rate/255.0 green:1 - (255-215)*rate/255.0 blue:1 - (255-100)*rate/255.0 alpha:1];

rate将替换alpha