【问题标题】:How to let two overlapping views to receive the user touch events iosios如何让两个重叠的视图接收用户触摸事件
【发布时间】:2014-10-08 12:11:57
【问题描述】:

我的 UIWebView 响应来自用户的触摸事件,并且 UIView 与 UIWebView 部分重叠。我在重叠视图中添加了一个平移手势识别器。当用户触摸重叠视图时,它会阻止 webview 触摸事件。当点击重叠视图时,Webview 是否有任何可能的方式接收触摸事件?谢谢

【问题讨论】:

    标签: ios objective-c iphone


    【解决方案1】:

    如果只想点击重叠区域,overlay view可以继承UIView并实现hitTest:withEvent:,下面会让重叠区域透明。

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    {
        UIView *hitView = [super hitTest:point withEvent:event];
        if (hitView == self && CGRectContainsPoint(overlappedArea, point)) {
        return nil;
       }
        return hitView;
    }
    

    但这会取消覆盖视图重叠区域的所有触摸,从而使平移手势失败。另一种方法是将平移手势和点击手势添加到他们拥有的超级视图中,在覆盖视图区域,启用平移手势,在底层视图区域,启用点击手势。像这样:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        CGPoint touchPoint = [touch locationInView:self.view];
    
        if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
            if (CGRectContainsPoint(self.overlayView.frame, touchPoint)) {
                return YES;
            } else {
                return NO;
            }
         } else if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
            if (CGRectContainsPoint(self.underlyingView.frame, touchPoint)) {
                return YES;
            } else {
                return NO;
            }
        }
        return YES;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2016-05-28
      • 1970-01-01
      • 2018-02-27
      相关资源
      最近更新 更多