如何从UISlider获取RGB颜色值

3

我尝试了这段代码,但它没有正常工作。在UISlider的值更改时,我调用了这个方法...

@property (strong, nonatomic) IBOutlet UISlider *r;
@property (strong, nonatomic) IBOutlet UISlider *g;
@property (strong, nonatomic) IBOutlet UISlider *b;
@property (strong, nonatomic) IBOutlet UILabel *colorLabel;

- (void)viewDidLoad
{
    [super viewDidLoad];

    _r.minimumValue=0;
    _r.maximumValue=255;

    _g.minimumValue=0;
    _g.maximumValue=255;

    _b.minimumValue=0;
    _b.maximumValue=255;

    // Do any additional setup after loading the view, typically from a nib.
}

-(void)sliderValueChanged:(UISlider*)slider
{
    [_colorLabel setBackgroundColor:[UIColor colorWithRed:_r.value green:_g.value blue:_b.value alpha:1]];
}

如果有人有任何想法,请帮忙。


2
请详细说明“不正常工作”的具体情况。是显示了错误的颜色,还是没有显示任何颜色?是未运行sliderValueChanged方法,还是导致应用程序崩溃?还是您的设备爆炸了?有很多种方式可以“不正常工作”,仅仅说这句话完全没有任何帮助。 - Fogmeister
1
@Fogmeister 我非常确定这是最后一个。 - Exothug
5个回答

4
UIColor 方法中的每个组件参数都在 0 到 1 的范围内,因此您需要在传递之前将滑块值除以 255.0

1
或者他可以使用滑块,仅从0到1,以避免像我在示例中所做的那样。 - Exothug

3
尝试这个(忽略 alpha 滑块,这是我自己解决类似任务的实际方案):
请记住:将滑块从0到1,以避免除以255。
.h 文件:
IBOutlet UISlider *rSlider;
IBOutlet UISlider *gSlider;
IBOutlet UISlider *bSlider;

.m file

-(void)blueSlider:(id)sender
{
    bSlider = (UISlider *)sender;
    UIColor *newColor = [UIColor colorWithRed:rSlider.value green:gSlider.value blue:bSlider.value alpha:alphaSlider.value];
    colorView.backgroundColor = newColor;
}



-(void)greenSlider:(id)sender
{
    gSlider = (UISlider *)sender;
    UIColor *newColor = [UIColor colorWithRed:rSlider.value green:gSlider.value blue:bSlider.value alpha:alphaSlider.value];
    colorView.backgroundColor = newColor;
}


-(void)redSlider:(id)sender
{
    rSlider = (UISlider *)sender;
    UIColor *newColor = [UIColor colorWithRed:rSlider.value green:gSlider.value blue:bSlider.value alpha:alphaSlider.value];
    colorView.backgroundColor = newColor;
}

UIColor方法接受每个值(红色,绿色,蓝色,透明度)之间0到1的任何值。将这些值乘以255并将它们打印到文本字段中,可以让您了解滑块的准确性。 - Exothug
你应该认真考虑将共同的代码提取到一个单独的方法中,然后从三个处理程序中调用。 - ChrisF
@Exothug 不要介意我的话。我只是想说,你应该通过删除其他两个代码并使用三个滑块调用单个方法来进行优化,而且你不需要这个语句 rSlider = (UISlider *)sender; - Prince Kumar Sharma

2
请使用您的设置颜色方法,如下所示:
-(void)sliderValueChanged:(UISlider*)slider
{
    float r=[[NSString stringWithFormat:@"%.0f",_r.value] floatValue];
    float g=[[NSString stringWithFormat:@"%.0f",_g.value]floatValue];
    float b=[[NSString stringWithFormat:@"%.0f",_b.value]floatValue];

    UIColor *colorToSet=[UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1];
    [_colorLabel setBackgroundColor:colorToSet];
}

查看示例


2
使用从0到1的滑块可以节省不必要的计算。 - Exothug

0

针对 Exothug 用户

如果滑块值仅从 0 到 1

-(IBAction)sliderValue:(UISlider*)sender
{
    UIColor *newColor = [UIColor colorWithRed:rSlider.value green:gSlider.value blue:bSlider.value alpha:1];
    _colorLabel.backgroundColor = newColor;
}

0

1
请勿将代码发布为图像。相反,请始终将您的代码发布为代码格式化文本,如网站帮助中心文档所述。 - Sourav Ghosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接