iOS`UIView`在alpha为0时停止响应手势识别器?

时间:2014-10-10 06:48:39

标签: ios objective-c transparency

我有一个自定义的UIView,它的行为是这样的:在我从nib加载它并将它添加到我的视图层次结构后,它首先几乎是透明的(alpha = 0.1),当我点击它时,它变得不透明(alpha = 1.0),经过一段时间后,它会自动变得几乎透明(alpha = 0.1)。

自定义视图中的代码是这样的,它的工作方式如上所述:

- (void)awakeFromNib {
  [self setup];
}

- (void)setup {
  self.alpha = 0.1f;
  [self addGestureRecognizer:[[UITapGestureRecognizer alloc]
                                 initWithTarget:self
                                         action:@selector(tapped:)]];
}

- (void)tapped:(UITapGestureRecognizer *)tapRecognizer {
  if (self.alpha == 1.0) {
    [self hideSelf];
  } else {
    [UIView animateWithDuration:0.5
        animations:^{ self.alpha = 1.0f; }
        completion:^(BOOL finished) {
            [self.timer invalidate];
            self.timer = nil;
            self.timer = [NSTimer timerWithTimeInterval:3
                                                 target:self
                                               selector:@selector(hideSelf)
                                               userInfo:nil
                                                repeats:NO];
            [[NSRunLoop currentRunLoop] addTimer:self.timer
                                         forMode:NSDefaultRunLoopMode];
        }];
  }
}

- (void)hideSelf {
  [UIView animateWithDuration:0.5
      animations:^{ self.alpha = 0.1f; }
      completion:^(BOOL finished) {
          [self.timer invalidate];
          self.timer = nil;
      }];
}

但我不想要"几乎透明(alpha = 0.1)",我想"透明(alpha = 0.0)"。所以我只需改变" 0.1"至" 0.0"在我的代码中。但是当我点击视图时,它甚至不会调用tapped:方法。为什么会这样?我怎样才能使它发挥作用?

2 个答案:

答案 0 :(得分:8)

它的工作方式是,如果将alpha视图更改为零,则会停止获取触摸事件。

您可以将视图的背景颜色更改为透明,而不是更改视图的alpha,这样您的视图就不会显示,并且您可以获得事件。

答案 1 :(得分:0)

完全透明意味着隐藏权利,而不是将其设为0.0,使UIview隐藏,并在同一点放置一个Uicolor清晰颜色的按钮,并将控制转移到该位置。