在不影响子视图的情况下检测整个应用程序中的 3 根手指触摸

Posted

技术标签:

【中文标题】在不影响子视图的情况下检测整个应用程序中的 3 根手指触摸【英文标题】:Detect 3 fingers touch in the whole app without affecting the subviews 【发布时间】:2012-08-02 20:54:08 【问题描述】:

我正在制作一个 iPad 应用程序,您可以在其中随时用 3 根手指在整个屏幕上滑动/平移(取消操作) 它与 UISwipeGestureRecognizer 或 UIPanGestureRecognizer 一起使用,但我手指下方的子视图(例如 UITableView 或 UIScrollview)收到了触摸和移动。这是我不想要的。

我的想法是在整个应用程序顶部放置一个透明的 UIView,它会将触摸转发到其他视图或不转发。我用 hitTest 尝试了一些东西,但我认为我不太了解它,因为返回的触摸次数不正确并且需要时间......

如果你能帮助我,非常感谢:)

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

    if (event.type == UIEventTypeTouches) 
        if (event.allTouches.count >= 2) 
            return self;
        
    
    return [super hitTest:point withEvent:event];

【问题讨论】:

【参考方案1】:

我认为你必须使用

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

UIGestureRecognizer 的委托来定义哪些手势同时有效。

例如:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    NSLog(@"gestRecogn: %@ otherGestRec: %@",[[gestureRecognizer class] className],[[otherGestureRecognizer class] className]);

    if ([[[gestureRecognizer class] className] isEqualToString:@"UIScrollViewPanGestureRecognizer"] && [[[otherGestureRecognizer class] className] isEqualToString:@"UILongPressGestureRecognizer"]) 
        return FALSE;
    
    if ([[[gestureRecognizer class] className] isEqualToString:@"UILongPressGestureRecognizer"] && [[[otherGestureRecognizer class] className] isEqualToString:@"UIScrollViewPanGestureRecognizer"]) 
        return FALSE;
    
    return TRUE;

【讨论】:

以上是关于在不影响子视图的情况下检测整个应用程序中的 3 根手指触摸的主要内容,如果未能解决你的问题,请参考以下文章

如何在不向用户显示视图的情况下捕获整个滚动视图的图片

如何在不裁剪行/子视图的情况下为 tableView 的大小调整设置动画?

如何在不刷新整个页面的情况下刷新视图中的数据?有角度的

如何在不像 Whatsapp 那样遮挡整个屏幕的情况下禁用表格视图?

在不重新加载整个表格视图的情况下更改 UITableView 的部分页眉/页脚标题

如何在不影响带有 html/css 的子元素的情况下应用不透明度?