我开发了一个色轮,使用圆形渐变来响应平移手势识别器,并添加了一个控制颜色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值。
感谢任何帮助
答案 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];
}