【问题标题】:UIView pass through touches only if more than one finger?UIView 只有在超过一根手指的情况下才能通过触摸?
【发布时间】: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)
    }

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

【问题讨论】:

    标签: swift uiview touches uievent


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多