确定是否在Swift 2.0中拖动/移动了MKMapView

bas*_*dan 5 mkmapview ios swift swift2

如何检测用户何时拖动或移动MKMapView,以防止例如阻止用户当前位置的自动归位.

bas*_*dan 14

注意:这个答案是可能的,并且改编自Jano对Objective-C的相同问题的回答:确定是否拖动/移动了MKMapView.谢谢Jano.

要正确检测地图拖动,您必须添加UIPanGestureRecognizer.这是拖动手势识别器(平移=拖动).

第1步:在viewDidLoad中添加手势识别器(Swift 2)

override func viewDidLoad() {
    super.viewDidLoad()
    // All your other setup code
    let mapDragRecognizer = UIPanGestureRecognizer(target: self, action: "didDragMap:")
    mapDragRecognizer.delegate = self
    self.mapView.addGestureRecognizer(mapDragRecognizer)
}
Run Code Online (Sandbox Code Playgroud)

Swift 3版本的上述手势识别器设置(选择器语法已更改)

override func viewDidLoad() {
    super.viewDidLoad()
    let mapDragRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.didDragMap(gestureRecognizer:)))
    mapDragRecognizer.delegate = self
    self.mapView.addGestureRecognizer(mapDragRecognizer)
}
Run Code Online (Sandbox Code Playgroud)



步骤2:将协议UIGestureRecognizerDelegate添加到视图控制器,使其作为委托.

class MapViewController: UIViewController, UIGestureRecognizerDelegate
Run Code Online (Sandbox Code Playgroud)

步骤3:为UIPanGestureRecognizer添加以下代码,以使用MKMapView中现有的手势识别器:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

第4步:如果你想每次调用你的方法一次而不是50次,请在选择器中检测"拖动结束"或"拖动开始"状态:

func didDragMap(gestureRecognizer: UIGestureRecognizer) {
    if (gestureRecognizer.state == UIGestureRecognizerState.Began) {
        print("Map drag began")
    }

    if (gestureRecognizer.state == UIGestureRecognizerState.Ended) {
        print("Map drag ended")
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助有需要的人!