UIView 捕获单指运动但发送两指捏合以查看后面
UIView capture one-finger movements but send two-finger pinch to view behind
我有一个带有 MKMapView
和叠加层 UIView
的应用程序,用户可以在其中在地图顶部绘制多边形,这是通过使用 touchesBegan
、touchesMoved
等,然后累积触摸位置并将它们添加为 CAShapeLayer
.`
的路径
这很好用,但我们还希望能够缩放地图视图。
所以我们需要的是:
单指触摸或拖动,应该被叠加视图捕获并记录为用户正在绘制的多边形的输入。
多指触摸(捏合、旋转等)应传递到地图视图(位于叠加层后面)
完成此任务最明智的方法是什么?显然 hitTest
或 touchesMoved
都不能告诉我屏幕上有多少根手指。
我相信您会希望在叠加层中实施 this。
let panGesture = UIPanGestureRecognizer(target: self, action:#selector(draggedView(sender:)))
panGesture.delegate = self
@objc func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
if gestureRecognizer is UIPanGestureRecognizer {
return false
}
return true
}
你检查它是否是捏手势(或gesture.numberOfTouches > 1),如果是则不处理。然后事件应该冒泡到地图视图。
我通过向地图视图添加平移手势识别器来解决它,并在其上设置了 1 个手指的最大限制。并在我的叠加层中将 isUserInteractionEnabled
设置为 false
,这反而获得了接收触摸事件的新方法。
在平移手势识别器的动作中,我打开识别器状态并将动作发送到我的叠加视图,告知触摸已经开始、继续或结束。我在所有情况下都设置 mapView.isScrollEnabled = false
除了取消、结束和失败,我再次启用它,所以当用户用两个手指 pinch/drag 等
时它会起作用
我有一个带有 MKMapView
和叠加层 UIView
的应用程序,用户可以在其中在地图顶部绘制多边形,这是通过使用 touchesBegan
、touchesMoved
等,然后累积触摸位置并将它们添加为 CAShapeLayer
.`
这很好用,但我们还希望能够缩放地图视图。
所以我们需要的是:
单指触摸或拖动,应该被叠加视图捕获并记录为用户正在绘制的多边形的输入。
多指触摸(捏合、旋转等)应传递到地图视图(位于叠加层后面)
完成此任务最明智的方法是什么?显然 hitTest
或 touchesMoved
都不能告诉我屏幕上有多少根手指。
我相信您会希望在叠加层中实施 this。
let panGesture = UIPanGestureRecognizer(target: self, action:#selector(draggedView(sender:)))
panGesture.delegate = self
@objc func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
if gestureRecognizer is UIPanGestureRecognizer {
return false
}
return true
}
你检查它是否是捏手势(或gesture.numberOfTouches > 1),如果是则不处理。然后事件应该冒泡到地图视图。
我通过向地图视图添加平移手势识别器来解决它,并在其上设置了 1 个手指的最大限制。并在我的叠加层中将 isUserInteractionEnabled
设置为 false
,这反而获得了接收触摸事件的新方法。
在平移手势识别器的动作中,我打开识别器状态并将动作发送到我的叠加视图,告知触摸已经开始、继续或结束。我在所有情况下都设置 mapView.isScrollEnabled = false
除了取消、结束和失败,我再次启用它,所以当用户用两个手指 pinch/drag 等