0

これが私のコードです:

#define kDeselected .3
#define kSelected 1

- (void) selectButton:(UIImageView*)iconView{
    [iconView setAlpha:kDeselected];
    if(iconView.alpha == kDeselected){
        [iconView setAlpha:kSelected];
    }
    else if(iconView.alpha == kSelected){
        [iconView setAlpha:kDeselected];
     }
}

私はかなり高度なプログラマーですが、ifステートメントの直前に手動で入力して、ifステートメントがtrueになることを確認したときに、それがヒットしない理由については、私を超えています。

kDeselected = .5の場合、完全に機能することに注意してください。しかし、それが.3のときは、私は好きではありません。

4

3 に答える 3

2

constをfloat値にキャストしてみてください#define kDeselected 0.3f

于 2012-12-03T18:58:08.193 に答える
0

iconViewでのアルファの保存には制限された精度があると思います。おそらく0.3334を返しています。またはそのあたり。

画像編集では、8ビット整数の範囲外のアルファ値が表示されることはめったにありません。実際、私はこれまで見たことがないと思います。

私は試した

    for (int i = 0; i <100; i++) {
        double myAlpha = 0.3 + i * 0.01;
        self.view.alpha = myAlpha;
        NSLog(@"myAlpha=%30.20f viewAlpha=%30.20f", myAlpha, self.view.alpha);
    }

と見た

myAlpha=        0.29999999999999998890 viewAlpha=        0.30000001192092895508
myAlpha=        0.30999999999999999778 viewAlpha=        0.31000000238418579102
myAlpha=        0.32000000000000000666 viewAlpha=        0.31999999284744262695
myAlpha=        0.32999999999999996003 viewAlpha=        0.33000001311302185059
myAlpha=        0.33999999999999996891 viewAlpha=        0.34000000357627868652

したがって、アルファの戻り値が近似値以外のものになることを期待することは、希望的観測のように見えます。

于 2012-12-03T18:53:39.587 に答える
0

定数を型にキャストするときのコンパイラの問題が原因である可能性があります

やってみてください

CGFloat deselectedValue = kDeselected;

そして、それが実際に何であるかを確認し、それを使って作業してみてください。

- (void) selectButton:(UIImageView*)iconView{
    CGFloat deselectedValue = kDeselected;
    [iconView setAlpha:deselectedValue];
    if(iconView.alpha == deselectedValue){
        [iconView setAlpha:deselectedValue];
    }
    else if(iconView.alpha == kSelected){
        [iconView setAlpha:kDeselected];
    }
}

他のオプションは、.3をとして定義する#define kDeselected 0.3fことですが、.5が機能する場合に違いが生じるとは思えません。

于 2012-12-03T18:54:00.630 に答える