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 语句的结果为真时,它仍然没有命中它。

应该注意的是,当 kDeselected = .5 时,它可以完美运行。然而,当它是 0.3 时……它不喜欢我。

4

3 回答 3

2

尝试将您的 const 转换为浮点值#define kDeselected 0.3f

于 2012-12-03T18:58:08.193 回答
0

我猜想在 iconView 中存储 alpha 的精度有限。它可能返回 0.3334。或者差不多。

在图像编辑中,很少看到 8 位整数范围之外的 alpha 值。事实上,我想我从来没有见过。

我试过了

    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

因此,期望 alpha 的返回值不是近似值看起来像是一厢情愿!

于 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 回答