方法表现不佳

时间:2012-12-09 08:23:36

标签: objective-c pointers parameters static-methods

我是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];
}

解决这个问题很简单:只是不要使用静态方法。我只是不明白为什么它不起作用。有没有某种指针与对象转移我搞乱了返回值?

2 个答案:

答案 0 :(得分:1)

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

只需将静态方法参数类型更改为int

即可

答案 1 :(得分:1)

int / int给出整数....类型case要么浮动一个,要么0.0到1.0值,否则255/256会给你0,实际上它会是0.9的东西,因为target是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;
}