我是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];
}
解决这个问题很简单:只是不要使用静态方法。我只是不明白为什么它不起作用。有没有某种指针与对象转移我搞乱了返回值?
答案 0 :(得分:1)
您的问题是滑块的值是float
类型,当您将其传递给静态方法时,它们将转换为int
类型(因为参数类型为{ {1}})这意味着当你除以256时,结果被截断为零,因为你将int
和int
分开(我假设你的滑块值总是<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;
}