Iphone UIColor/RGB从X颜色到Y颜色的转换方式

Iphone UIColor/RGB从X颜色到Y颜色的转换方式,iphone,objective-c,cocoa-touch,rgb,uicolor,Iphone,Objective C,Cocoa Touch,Rgb,Uicolor,我想知道是否有人可以建议最好的方法,从一种颜色到另一种颜色的渐进过程 所以-我有一个文本框,我有一个文本限制。我想让文本以白色开始,但当它达到最大文本限制时,应该是红色 有没有一个简单的方法可以做到这一点?我真的不确定从哪里开始…使用而不是RGB。它们具有从0%到100%的各种属性,因此您可以在代码中很好地扩展它们 以下是。您需要将端点颜色转换为一个颜色空间,其中一个参数是强度,以便保持此恒定值@杰维尼玛的建议很得体。然后将其他两个值视为二维中的两个点,并根据滑块的位置沿连接它们的线找到正确的点

我想知道是否有人可以建议最好的方法,从一种颜色到另一种颜色的渐进过程

所以-我有一个文本框,我有一个文本限制。我想让文本以白色开始,但当它达到最大文本限制时,应该是红色

有没有一个简单的方法可以做到这一点?我真的不确定从哪里开始…

使用而不是RGB。它们具有从0%到100%的各种属性,因此您可以在代码中很好地扩展它们


以下是。

您需要将端点颜色转换为一个颜色空间,其中一个参数是强度,以便保持此恒定值@杰维尼玛的建议很得体。然后将其他两个值视为二维中的两个点,并根据滑块的位置沿连接它们的线找到正确的点。将生成的颜色转换回RGB进行显示


您还可以尝试NSColor的blendedColorWithFraction:ofColor:,这取决于它的混合方式,它可能会满足您的需要

用简单的线性插值来实现。浮动是为了精确

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]);
}
float dr=(r_end-r_start)/(text_limit*1.0-1);
浮点dg=(g_结束-g_开始)/(文本限制*1.0-1);
float db=(b_end-b_start)/(text_limit*1.0-1);
int x=开始x;

对于(int i=0;i这里有一个
UIColor
类别,可用于在RGB或HSV中的两个
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

在这种情况下,HSL/HSV没有RGB更有帮助。而且我不确定OP是否真的在构建实际的UIColor时遇到了问题。我认为mootymoots正在寻找一个更全面的答案来解决文本框的问题。事实上,颜色是我的问题,而不是将其分配给文本。我只需要根据文本的长度,颜色值是什么,并将其设置为文本…对,这很简单。[字符索引]/[最大长度]=[在HSV计算中使用的百分比]它需要是UIColor而不是NS,UI没有这种方法:-(