确定是否在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") } }
希望这可以帮助有需要的人!