【问题标题】:Determine if MKMapView was dragged/moved in Swift 2.0确定 MKMapView 是否在 Swift 2.0 中被拖动/移动
【发布时间】:2016-01-29 01:49:58
【问题描述】:

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

【问题讨论】:

    标签: ios swift mkmapview swift2


    【解决方案1】:

    注意:这个答案是可能的,并且改编自 Jano 对 Objective-C 相同问题的回答:determine if MKMapView was dragged/moved。谢谢Jano

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

    第 1 步: 在 vi​​ewDidLoad (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 版本(选择器语法已更改)

    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 次,请在选择器中检测“拖动结束”或“拖动开始”状态:

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

    希望对有需要的人有所帮助!

    【讨论】:

    • 这个方案和使用“regionDidChangeAnimated”有什么区别?
    • 如何使用第 4 步我无法调用函数
    • @pprevalon - didDragMap() 由 mapDragRecognizer 的选择器触发。它可能不会被你调用,因为它的语法在 swift 中不断变化 - 例如,在 swift 3 中,手势识别器需要像这样设置才能触发 didDragMap 函数。 let mapPanInteractionRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.didDragMap(gestureRecognizer:))).
    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多