滑块改变UIColor的亮度

时间:2013-07-10 07:27:26

标签: ios objective-c xcode rgb hsv

我开发了一个色轮,使用圆形渐变来响应平移手势识别器,并添加了一个控制颜色alpha值的滑块,以及打印出R,G和B值的文本字段。

我现在需要实现一个控制颜色亮度的滑块,使用以下代码无法工作:

- (void)changeBrightness:(id)sender {
    hellSlider = (UISlider *)sender;

    float red = r;
    float green = g;
    float blue = b;
    float alp = alphaSlider.value;
    UIColor *color2 = [UIColor colorWithRed:red green:green blue:blue alpha: alp];
    colorView.backgroundColor = color2;
}

事实上,我还不知道如何解决这个问题。因为似乎没有我可以访问的亮度属性,而我不知道如何将颜色转换为HSV值。

感谢任何帮助

3 个答案:

答案 0 :(得分:4)

您应该处理HSB颜色方法:

+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha

并在此处查看颜色样式之间的转换:Change from RGB to HSB on iPhone?

答案 1 :(得分:1)

您需要将颜色转换为HSB颜色空间,为您提供“亮度”参数。

UIColor实例获取这些值非常简单,但涉及通过引用传递值,这可能与新编码器不同。

UIColor *currentColor = colorView.backgroundColor;
CGFloat hue, saturation, brightness, alpha;

BOOL success = [currentColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];

这会将值放入相应的参数中。然后,您可以根据需要调整亮度分量,然后从新值重新创建UIColor对象。

brightness = hellSlider.value * brightness; // example transformation, assuming hellSlider's value is bounded between 0 and 1

UIColor *newColor = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha]; 
colorView.backgroundColor = newColor;

答案 2 :(得分:1)

好吧,我按照建议使用HSB颜色方法让它工作。

代码:

- (void)changeBrightness:(id)sender {
    hellSlider = (UISlider *)sender;

    UIColor *currentColor = colorView.backgroundColor;
    CGFloat hue, saturation, brightness, alpha;
    BOOL success = [currentColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
    brightness = hellSlider.value;
    UIColor *newColor = [UIColor colorWithHue:hue saturation:saturationSlider.value brightness:hellSlider.value alpha:alphaSlider.value];

    colorView.backgroundColor = newColor;
    alphaText.text = [NSString stringWithFormat:@"%.2f",alphaSlider.value];
    brightnessText.text = [NSString stringWithFormat:@"%.2f",hellSlider.value];
    saturationText.text = [NSString stringWithFormat:@"%.2f",saturationSlider.value];

}