0

我是 iPhone 开发的新手,对 C 风格的编程(即指针)非常生疏。我创建了一个 RGBColor 类,其中包含红色、绿色和蓝色的三个整数。在这个类中,我有一个静态方法来为三个 RGB int 值返回一个 UIColor。我使用该方法从三个滑块更改背景颜色。

这是静态方法:

+(UIColor *)getColorFromRed:(int)redValue green:(int)greenValue blue:(int)blueValue
{
    UIColor *color = [[UIColor alloc]initWithRed:redValue/256
                                           green:greenValue/256
                                            blue:blueValue/256
                                           alpha:1.0];
    return color;
}

我最初是这样编写方法的,但是当它不起作用时改变了它:

+(UIColor *)getColorFromRGB:(int)redValue :(int)greenValue :(int)blueValue
{
    UIColor *color = [[UIColor alloc]initWithRed:redValue/256
                                           green:greenValue/256
                                            blue:blueValue/256
                                           alpha:1.0];
    return color;
}

根据我的理解,第一种或第二种都是编写方法的有效方式。

现在,我使用该方法通过 changeBackgroundColor 函数更改视图中的背景颜色,但它不起作用:

- (void)changeBackgroundColor
{
    UIColor *color = [RGBColor getColorFromRed:redSlider.value
                                         green:greenSlider.value
                                          blue:blueSlider.value];

    [background setBackgroundColor:color];
}

如果我完全绕过我的静态方法,只让 changeBackgroundColor 方法创建 UIColor,背景颜色就会改变。

- (void)changeBackgroundColor
{
    UIColor *color = [[UIColor alloc]initWithRed:redSlider.value/256
                                           green:greenSlider.value/256
                                            blue:blueSlider.value/256
                                           alpha:1.0];

    [background setBackgroundColor:color];
}

这个问题很容易解决:只是不要使用静态方法。我只是不明白为什么它不起作用。是否有某种指针与对象传输我弄乱了返回值?

4

2 回答 2

1

你的问题是滑块的值是类型的float,当你将它传递给你的静态方法时,它们被转换为类型int(因为参数类型是int),这意味着当你除以 256 时,结果被截断为零,因为你是int用 and划分一个int(我假设你的滑块值总是 < 256,所以整数部分总是为零)。

只需将您的静态方法参数类型更改为float

于 2012-12-09T08:33:44.113 回答
1

int/int 给整数.... 类型 case 要么 1 浮动,所以 0.0 到 1.0 的值会出现,否则 255/256 会给你 0,acutally 它会是 0.9 的东西,因为目标是 int,只有整数部分会是考虑,结果为0。

+(UIColor *)getColorFromRGB:(float)redValue :(float)greenValue :(float)blueValue
{
    UIColor *color = [[UIColor alloc]initWithRed:redValue/256.0
                                           green:greenValue/256.0
                                            blue:blueValue/256.0
                                           alpha:1.0];
    return color;
}
于 2012-12-09T08:34:50.260 回答