UIView 只有在超过一根手指的情况下才能通过触摸?

Posted

技术标签:

【中文标题】UIView 只有在超过一根手指的情况下才能通过触摸?【英文标题】:UIView pass through touches only if more than one finger? 【发布时间】:2021-06-18 04:48:37 【问题描述】:

我的 UIView 已经使用手势识别器处理单指触摸,可以很好地进行点击和平移。

但是,我希望用两根手指进行触摸以传递到该视图后面的父视图。 (父级是一个带有 javascript 生成的地图的 WKWebView,我希望用户能够捏缩放,即使这个另一个视图在前面。当另一个视图不在前面时,这可以正常工作,但当然当前视图在那里时,它不会通过触摸。)

我尝试在前视图中使用以下任一方法检测到这一点,但在这两种情况下,allTouches 都是一个空集(零次触摸):


    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool 
        if let event = event 
            print("\(event)")
            if let touches = event.allTouches 
                print("\(event.allTouches)")
                if touches.count > 1 
                    return false
                
            
        
        
        return super.point(inside: point, with: event)
    
    
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? 
        if let event = event 
            print("\(event)")
            if let touches = event.allTouches 
                print("\(event.allTouches)")
                if touches.count > 1 
                    return nil
                
            
        
        
        return super.hitTest(point, with: event)
    

如何继续使用我现有的手势识别器,但通过多指触摸传递到超级视图?

【问题讨论】:

【参考方案1】:

更多的是解决方法而不是实际答案,但这就是为我解决它的方法......

我没有将前面的子视图用透明层覆盖所有父视图,而是将其缩小为仅包含向用户实际呈现信息和表单字段所需的小区域。

然后我将单点触控手势更改为添加到父视图,而不是子视图。

所以现在没有任何触摸被子视图捕获(除了它的表单字段和按钮)。

无论如何,这也许是处理我的特殊情况的更好方法。所以我可能问错了问题(X/Y 问题!)。

【讨论】:

以上是关于UIView 只有在超过一根手指的情况下才能通过触摸?的主要内容,如果未能解决你的问题,请参考以下文章

WPF学习第十八章 多点触控输入

WPF学习第十八章 多点触控输入

使用 PanGestureRecognizer 创建 UIView 并在不抬起手指的情况下激活它

只允许触摸一个 UIView

关于unity android开发的手指触屏常用操作之Touch

在 iPhone 中使用 UIPanGesture 旋转 UIView 的框架增加减少