如何检测缩放';s在Swift中对地图的影响

如何检测缩放';s在Swift中对地图的影响,swift,mkmapview,mapkit,apple-maps,Swift,Mkmapview,Mapkit,Apple Maps,我正在为我的mapView使用regionDidChangeAnimated。我想检测用户何时缩放或拖动地图。正在检测拖动,但我似乎无法检测用户何时缩放地图。我尝试使用: func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) { print("region will change") } 但当我缩放地图时,它不起作用 完整代码: var locationManager: CLLocationM

我正在为我的mapView使用
regionDidChangeAnimated
。我想检测用户何时缩放或拖动地图。正在检测拖动,但我似乎无法检测用户何时缩放地图。我尝试使用:

func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    print("region will change")
}
但当我缩放地图时,它不起作用

完整代码:

var locationManager: CLLocationManager = CLLocationManager()
var startLocation: CLLocation!

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()

    //get current location
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.delegate = self
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()

    self.mapView.showsUserLocation = true
    startLocation = nil

    let mapDragRecognizer = UIPanGestureRecognizer(target: self, action: "didDragMap:")
    mapDragRecognizer.delegate = self
    self.mapView.addGestureRecognizer(mapDragRecognizer)
    self.mapView.pitchEnabled = true
    self.mapView.showsBuildings = true

}

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [CLLocation]) {
    let location = locations.last
    let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))
    mapView.setRegion(region, animated: false)
    let currentLocX = String(format: "%.4f", location!.coordinate.latitude)
    let currentLocY = String(format: "%.4f", location!.coordinate.longitude)

    self.locationManager.stopUpdatingLocation()
}

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

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    print("Errors: " + error.localizedDescription)
}

func didDragMap(gestureRecognizer: UIGestureRecognizer) {
    print("Drag")
}

func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    print("Zoom")
}

我已经解决了。在
覆盖func viewDidLoad()
中,需要添加
self.mapView.delegate=self
并添加用于确定地图缩放的功能:

private var mapChangedFromUserInteraction = false

private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
    let view = self.mapView.subviews[0]
    if let gestureRecognizers = view.gestureRecognizers {
        for recognizer in gestureRecognizers {
            if( recognizer.state == UIGestureRecognizer.State.began || recognizer.state == UIGestureRecognizer.State.ended )) {
                return true
            }
        }
    }
    return false
}

func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    mapChangedFromUserInteraction = mapViewRegionDidChangeFromUserInteraction()

}

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    if (mapChangedFromUserInteraction) {
        print("ZOOM finished")
    }
}