这是我的代码:
#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然而......它不喜欢我。
答案 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有效会产生影响