【发布时间】:2013-02-08 13:34:34
【问题描述】:
我有一个问题:我需要能够采用两种颜色并从中制作“虚拟渐变”。然后我需要能够在这条线上的任何点找到颜色。我目前的做法是这样的:
if (fahrenheit < kBottomThreshold)
{
return [UIColor colorWithRed:kBottomR/255.0f green:kBottomG/255.0f blue:kBottomB/255.0f alpha:1];
}
if (fahrenheit > kTopThreshold)
{
return [UIColor colorWithRed:kTopR/255.0f green:kTopG/255.0f blue:kTopB/255.0f alpha:1];
}
double rDiff = kTopR - kBottomR;
double gDiff = kTopG - kBottomG;
double bDiff = kTopB - kBottomB;
double tempDiff = kTopThreshold - kBottomThreshold;
double rValue;
double gValue;
double bValue;
rValue = kBottomR + ((rDiff/tempDiff) * fahrenheit);
gValue = kBottomG + ((gDiff/tempDiff) * fahrenheit);
bValue = kBottomB + ((bDiff/tempDiff) * fahrenheit);
return [UIColor colorWithRed:rValue/255.0f green:gValue/255.0f blue:bValue/255.0f alpha:1];
变量:
-
fahrenheit是传递给我的函数的变量,它是我要为其查找颜色的虚拟行上的数字。 -
kTopR、kTopB和kTopG是渐变一端的 RGB 值。他们的kBottom同行也是如此。 -
kBottomThreshold和kTopThreshold是我渐变的端点。
这是我的问题: 当fahrenheit 越过渐变的任一端时,渐变似乎“跳跃”到不同的值。 em>
我包含了一个示例项目,托管在我的 S3 服务器上,here。
你真的需要下载该项目并在模拟器/设备上尝试一下,看看我的意思(除非你非常聪明,并且可以通过查看代码)
【问题讨论】:
标签: ios gradient uicolor blending linear-gradients