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

如何检测用户拖动或移动MKMapView的时间,以防止在用户当前位置自动归位。

注意:这个答案是可能的,从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) } 

上面的手势识别器设置的Swift 3版本(select器语法已经改变)

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

第2步:将协议UIGestureRecognizerDelegate添加到视图控制器,以便它作为委托。

 class MapViewController: UIViewController, UIGestureRecognizerDelegate 

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

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } 

步骤4:如果您想调用一次方法而不是每次拖动50次,请在您的select器中检测“拖动结束”或“拖动开始”状态:

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

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