Y色にX色から行くにはUIColor / RGBウェイ
-
22-09-2019 - |
質問
私は疑問に思う。
だから - 私は上のテキストの制限を持つテキストボックスを持っています。私は白のテキストの開始をしたいのですが、それが最大のテキストの制限に到達する時間によって赤になります。
これを行う簡単な方法はありますか?私は本当にどこから始めればわからないよ...
解決
使用 HSLまたはHSVは、RGBのではなく、を。あなたは、コードでうまくそれらを拡張することができますので、彼らは、0から100パーセントに行く様々な性質を持っています。
ここでの<のhref = "http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIColor_Class/Reference/Reference.html#//apple_ref/occ/clm/UIColor/colorWithHue:saturation :明るさ:アルファ:」REL = "nofollowをnoreferrer">客観C参照する
他のヒント
ここでRGBまたはHSVのいずれかで2 UIColor
s間で直線的に補間するために使用することができますUIColor
のカテゴリがあります:
@implementation UIColor (Interpolate)
+ (UIColor *)interpolateRGBColorFrom:(UIColor *)start to:(UIColor *)end withFraction:(float)f {
f = MAX(0, f);
f = MIN(1, f);
const CGFloat *c1 = CGColorGetComponents(start.CGColor);
const CGFloat *c2 = CGColorGetComponents(end.CGColor);
CGFloat r = c1[0] + (c2[0] - c1[0]) * f;
CGFloat g = c1[1] + (c2[1] - c1[1]) * f;
CGFloat b = c1[2] + (c2[2] - c1[2]) * f;
CGFloat a = c1[3] + (c2[3] - c1[3]) * f;
return [UIColor colorWithRed:r green:g blue:b alpha:a];
}
+ (UIColor *)interpolateHSVColorFrom:(UIColor *)start to:(UIColor *)end withFraction:(float)f {
f = MAX(0, f);
f = MIN(1, f);
CGFloat h1,s1,v1,a1;
[start getHue:&h1 saturation:&s1 brightness:&v1 alpha:&a1];
CGFloat h2,s2,v2,a2;
[end getHue:&h2 saturation:&s2 brightness:&v2 alpha:&a2];
CGFloat h = h1 + (h2 - h1) * f;
CGFloat s = s1 + (s2 - s1) * f;
CGFloat v = v1 + (v2 - v1) * f;
CGFloat a = a1 + (a2 - a1) * f;
return [UIColor colorWithHue:h saturation:s brightness:v alpha:a];
}
@end
単純な線形補間でそれを行います。フロートは精度のためです。
float dr = (r_end - r_start) / (text_limit*1.0 - 1);
float dg = (g_end - g_start) / (text_limit*1.0 - 1);
float db = (b_end - b_start) / (text_limit*1.0 - 1);
int x = start_x;
for(int i=0; i<text_size; ++i)
{
PutOutColoredChar(x,start_y , text[i], (int)(r_start+(dr*i)) , ((int)g_start+(dg*i)), (int)(g_start+(db*i)) );
x += WithOfChar(text[i]);
}
私は色の専門家ではないですが、これは私のために醜いにするために使用しません。
あなたは、この一定に保つことができるようにパラメータの一つが強度である色空間に自分のエンドポイントの色を変換する必要があります。 @ jvenemaの提案はまともです。そして、2次元での二点として、他の2つの値を扱い、あなたのスライダーの位置に応じて、それらを結ぶ線に沿って正確なポイントを見つけます。表示のためにRGBに得られるカラーバックを変換します。
それは、それはあなたがやりたいかもしれないブレンド方法に応じ:, ofColor:また、NSColorのblendedColorWithFractionを試してみてください。