可可触摸-创建一个不透明的UIColor,它看起来和另一个半透明的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

答案将具体取决于了解背景颜色。假设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];

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

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

相关内容

最新更新