UIView捕获一指动作,但发送两指捏以查看后面的情况

时间:2018-10-03 13:39:05

标签: ios swift uiview mapkit uigesturerecognizer

我有一个带有MKMapView和覆盖层UIView的应用,用户可以在地图上绘制多边形,这可以通过使用touchesBegan,{{1 }}等,然后累积触摸位置并将其添加为touchesMoved的路径。

这可以正常工作,但我们也希望能够捏一下以缩放地图视图。

所以我们需要以下内容:

单指触摸或拖动应被叠加视图捕获,并记录为用户正在绘制的多边形的输入。

应该将多指触摸(捏,旋转等)传递到地图视图(位于叠加层的后面)

最明智的方法是什么?显然CAShapeLayerhitTest都不能告诉我屏幕上有多少手指。

2 个答案:

答案 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,但取消,结束和失败除外,我再次启用了它,因此当用户用两根手指捏/拖动等操作时,它就可以工作。