如何忽略特定事件以便它传递到 ZStack 中的下方视图?

How to ignore specific events so it passes to view below in a ZStack?

我正在开发一个小型 PencilKit 应用程序,并在 ZStack 中在其顶部放置了一个 UIViewRepresentable 来处理手势输入(在屏幕上旋转、缩放和平移 canvas)。但我正在努力让顶视图忽略 PencilKit 输入以在下面的 canvas 上绘图。当手势视图处于活动状态时,没有任何内容可以通过 canvas。关闭命中测试或用户交互将禁用对手势视图的所有输入。有没有办法将某些输入传递到下面的视图?

在这种情况下,如果不显示实际实现可能难以帮助您,但您可以尝试覆盖 UIViewhitTest 函数。一个例子可能是这样的:

// by turning on this flag 
// the view would pass all events to the 
// underlying view
var passEventsToUnderlyingViews = false
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    guard passEventsToUnderlyingViews else {
        return super.hitTest(point, with: event)
    }
    let view = super.hitTest(point, with: event)
    return view == self ? nil : view
}