ios - 如何让两个重叠的 View 接收用户触摸事件 ios

标签 ios objective-c iphone

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

最佳答案

如果你只想点击重叠区域,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;
}

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

- (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;
}

关于ios - 如何让两个重叠的 View 接收用户触摸事件 ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26256607/

相关文章:

iOS 应用程序配置文件

ios - 如何将 UIPopoverArrowDirection 定位到弹出 View 的右上角

ios - 在 iOS 中创建和部署静态库时避免 header 冲突

ios - 我必须手动删除 KVO 中的观察者吗

iphone - UIModalTransitionStylePartialCurl 不会触发 ViewWillAppear

iphone - NSXMLParser 解析使用 Windows-1256 编码的 xml 文件

ios - 如何为不同的对象链接和分组核心动画?

ios - 自定义 UIAlertView 和操作表

iphone - 更新 UICollectionViewCell 中的 UIProgressView 以下载文件

ios - Objective-c CATransition问题