imageView的iOS alpha值无法比较

时间:2012-12-03 18:44:06

标签: iphone objective-c ios ipad uiimageview

这是我的代码:

#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然而......它不喜欢我。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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的返回值不是近似值,只是一厢情愿的想法!

答案 2 :(得分: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有效会产生影响