UIView 仅在多于一根手指时才通过触摸?
UIView pass through touches only if more than one finger?
我的 UIView 已经可以很好地处理带有手势识别器的单指触摸,以便点击和平移。
但是,我希望将两根手指的触摸传递到该视图后面的父视图。 (父级是一个 WKWebView,带有 javascript 生成的地图,我希望用户能够捏缩放,即使另一个视图在前面。当另一个视图不在前面时,这可以正常工作,当然,当有前视图时,它不会通过触摸。)
我尝试在前视图中使用以下任一方法来检测此问题,但在这两种情况下,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)
}
如何继续使用我现有的手势识别器,但将多指触摸传递给超级视图?
更多的是解决方法而不是实际答案,但这是为我解决问题的方法...
我没有使用透明层覆盖所有父视图的前面子视图,而是将其缩小为仅包含实际向用户呈现信息和表单字段所需的小区域。
然后我将单点触摸手势更改为添加到父视图,而不是子视图。
所以现在 NONE 的触摸被子视图捕获(除了它的表单字段和按钮)。
无论如何,这可能是处理我的特殊情况的更好方法。所以我可能问错了问题(X/Y 问题!)。
我的 UIView 已经可以很好地处理带有手势识别器的单指触摸,以便点击和平移。
但是,我希望将两根手指的触摸传递到该视图后面的父视图。 (父级是一个 WKWebView,带有 javascript 生成的地图,我希望用户能够捏缩放,即使另一个视图在前面。当另一个视图不在前面时,这可以正常工作,当然,当有前视图时,它不会通过触摸。)
我尝试在前视图中使用以下任一方法来检测此问题,但在这两种情况下,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)
}
如何继续使用我现有的手势识别器,但将多指触摸传递给超级视图?
更多的是解决方法而不是实际答案,但这是为我解决问题的方法...
我没有使用透明层覆盖所有父视图的前面子视图,而是将其缩小为仅包含实际向用户呈现信息和表单字段所需的小区域。
然后我将单点触摸手势更改为添加到父视图,而不是子视图。
所以现在 NONE 的触摸被子视图捕获(除了它的表单字段和按钮)。
无论如何,这可能是处理我的特殊情况的更好方法。所以我可能问错了问题(X/Y 问题!)。