如何忽略特定事件以便它传递到 ZStack 中的下方视图?
How to ignore specific events so it passes to view below in a ZStack?
我正在开发一个小型 PencilKit 应用程序,并在 ZStack 中在其顶部放置了一个 UIViewRepresentable 来处理手势输入(在屏幕上旋转、缩放和平移 canvas)。但我正在努力让顶视图忽略 PencilKit 输入以在下面的 canvas 上绘图。当手势视图处于活动状态时,没有任何内容可以通过 canvas。关闭命中测试或用户交互将禁用对手势视图的所有输入。有没有办法将某些输入传递到下面的视图?
在这种情况下,如果不显示实际实现可能难以帮助您,但您可以尝试覆盖 UIView
的 hitTest
函数。一个例子可能是这样的:
// 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
}
我正在开发一个小型 PencilKit 应用程序,并在 ZStack 中在其顶部放置了一个 UIViewRepresentable 来处理手势输入(在屏幕上旋转、缩放和平移 canvas)。但我正在努力让顶视图忽略 PencilKit 输入以在下面的 canvas 上绘图。当手势视图处于活动状态时,没有任何内容可以通过 canvas。关闭命中测试或用户交互将禁用对手势视图的所有输入。有没有办法将某些输入传递到下面的视图?
在这种情况下,如果不显示实际实现可能难以帮助您,但您可以尝试覆盖 UIView
的 hitTest
函数。一个例子可能是这样的:
// 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
}