問題があります。2 つの色を取り、それらから「仮想グラデーション」を作成できるようにする必要があります。次に、この行の任意の時点で色を見つけることができる必要があります。私の現在のアプローチはこれです:
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
のどちらかの端を超えると、グラデーションは別の値に「ジャンプ」するようです。
S3 サーバーでホストされているサンプル プロジェクトをここに含めました。
プロジェクトをダウンロードし、シミュレーター/デバイスで試して、私が何を意味するかを確認する必要があります(非常に頭が良く、コードを見るだけでわかる場合を除きます)。