【问题标题】:iOS alpha value of imageView failing comparisonimageView 的 iOS alpha 值比较失败
【发布时间】:2012-12-03 18:44:05
【问题描述】:

这是我的代码:

#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 时,它可以完美运行。但是当它是 0.3 时……它不喜欢我。

【问题讨论】:

  • 检查舍入错误。最好只使用 bool 来检查选择,然后根据我们所处的状态设置 alpha,而不是检查 alpha 来确定状态
  • 嗯,很有趣。关于为什么它适用于一个值而不适用于另一个值的任何想法?会不会是因为一些奇怪的舍入错误?

标签: iphone objective-c ios ipad uiimageview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这可能是由于将常量转换为类型时的编译器问题

    尝试做

    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 有效,它会有所作为

    【讨论】:

      【解决方案3】:

      我猜想在 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 的返回值不是近似值看起来像是一厢情愿!

      【讨论】:

        猜你喜欢
        • 2018-12-26
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 2017-11-26
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        相关资源
        最近更新 更多