0

私はiPhone開発に不慣れで、Cスタイルのプログラミング、つまりポインターに非常に錆びています。赤、緑、青の3つのintを保持するRGBColorクラスを作成しました。このクラスには、3つのRGBint値のUIColorを返す静的メソッドがあります。その方法を使用して、3つのスライダーから背景色を変更します。

静的メソッドは次のとおりです。

+(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;
}

私の理解に基づくと、最初または2番目のいずれかがメソッドを作成するための有効な方法です。

ここで、このメソッドを使用して、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ますint(スライダーの値は常に<256であると想定しているため、整数部分は常にゼロになります)。

静的メソッドの引数の型を次のように変更するだけですfloat

于 2012-12-09T08:33:44.113 に答える
1

int / int give integer ....ケースのいずれかをfloatに入力して、0.0から1.0の値になるようにします。そうでない場合、255/256は0になり、実際には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 に答える