从UIColor获取MidColor

时间:2014-04-29 07:21:43

标签: ios uicolor

我正在寻找样品,它通过UIColor给我中间色。在下面的 例如,Get Slightly Lighter and Darker Color from UIColor
可以变得更轻盈UIColor的颜色较深。 但我需要从UIColor获得平均/中色。

有人帮我解决这个问题吗? 在此先感谢。

1 个答案:

答案 0 :(得分:1)

在第一个代码示例中,您指向的颜色向上或向下调整0.2的代码,并在第二个代码示例中调整亮度。

通过中间颜色我假设你的意思是两件事之一:(1)颜色本身,或(2)不像示例代码那样轻或暗的东西。要实现后者,您需要做的就是改变亮度乘数,例如

@implementation UIColor (LightAndDark)

- (UIColor *)lighterColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:MIN(b * 1.15, 1.0)
                               alpha:a];
    return nil;
}

- (UIColor *)darkerColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:b * 0.85
                               alpha:a];
    return nil;
}
@end

或者您正在寻找两种颜色之间的颜色?现在处理这个问题很快就会再次编辑。

更新:使用中间色:

- (UIColor *)betweenColor:(UIColor *)c andColor:(UIColor *)d
{
    CGFloat r, g, b, a;
    CGFloat r2, g2, b2, a2;
    [c getRed:&r green:&g blue:&b alpha:&a];
    [d getRed:&r2 green:&g2 blue:&b2 alpha:&a2];

    return [UIColor colorWithRed:(r + r2)/2
                           green:(g + g2)/2
                            blue:(b + b2)/2
                           alpha:a];
    return nil;
}

并将其称为:

UIColor *midColor = [self betweenColor:[UIColor whiteColor] andColor:[UIColor blackColor]];
self.view.backgroundColor = midColor;

这里是HSB中点:

- (UIColor *)betweenColor:(UIColor *)c andColor:(UIColor *)d
{
    CGFloat h, s, b, a;
    CGFloat h2, s2, b2, a2;
    [c getHue:&h saturation:&s brightness:&b alpha:&a];
    [d getHue:&h2 saturation:&s2 brightness:&b2 alpha:&a2];
    return [UIColor colorWithHue:(h+h2)/2
                      saturation:(s+s2)/2
                      brightness:(b+b2)/2
                           alpha:a];    return nil;
}