我有一个带有MKMapView
和覆盖层UIView
的应用,用户可以在地图上绘制多边形,这可以通过使用touchesBegan
,{{1 }}等,然后累积触摸位置并将其添加为touchesMoved
的路径。
这可以正常工作,但我们也希望能够捏一下以缩放地图视图。
所以我们需要以下内容:
单指触摸或拖动应被叠加视图捕获,并记录为用户正在绘制的多边形的输入。
应该将多指触摸(捏,旋转等)传递到地图视图(位于叠加层的后面)
最明智的方法是什么?显然CAShapeLayer
或hitTest
都不能告诉我屏幕上有多少手指。
答案 0 :(得分:0)
我相信您希望在叠加层中实施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 :(得分:0)
我解决了这一问题,就像在地图视图中添加了平移手势识别器一样,并在其上设置了1个手指的最大限制。并在我的叠加层中将isUserInteractionEnabled
设置为false
,从而获得了用于接收触摸事件的新方法。
在平移手势识别器的动作中,我打开识别器状态并将动作发送到我的叠加视图,告知触摸已开始,继续或结束。而且我在所有情况下都设置了mapView.isScrollEnabled = false
,但取消,结束和失败除外,我再次启用了它,因此当用户用两根手指捏/拖动等操作时,它就可以工作。