如何获得多种类型的等价

时间:2013-10-12 07:00:43

标签: objective-c

我如何评估等效性 - sender.alpha != 1这一行?我如何知道它是否具有完全不透明度?

- (IBAction)buttonPressed:(UIButton *)sender {
    NSLog(@"%@ -- Opacity: %f", digitPressed, sender.alpha);
    if (sender.alpha != 1) {
        NSLog(@"Nope!");
    }

1 个答案:

答案 0 :(得分:1)

通常,比较浮点数是not a good idea在完全不透明的不透明度测试的特殊情况下,与1.0f进行比较可能没问题。这是因为:

  1. 1.0f是IEEE单精度二进制浮点中的精确值。 (这就是你将在这里使用的。)
  2. 您想要检测这种类型的完全相等的情况将是您正在比较的值(几乎可以肯定)首先完全指定的情况。特别是,纯色的不透明度设置为1.0f
  3. 如果你的用例没有检测到纯色,而是在事情“足够坚固”的情况下工作,那么你需要更复杂的检查,测试值是否在“ε”(epsilon)内。特别是,考虑到alpha值的特殊功能(硬限制为1.0,通常在实现中映射到256个离散值,因此对ε的良好估计很容易计算出来),你会发现这个简化版本很可能做正确的事:

    if (1.0f - sender.alpha < 1.0f/256) …