mapkit缩小然后放大

时间:2015-12-17 14:35:23

标签: swift mapkit

我有一张放大的地图。当用户选择一个新的poi我想缩小(动画)并在动画放大到新的poi之后。

然而,它只是缩小而不是缩小。如果我使用动画:缩小时缩小它是有效的。

地图完成时如何放大缩小动画效果?

  func centerMapOnLocation(location: CLLocation) {

    //Är kartan inzoomad.. zooma ut först.
    if isZoomed
    {
        let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
            20000, 20000)
        OverviewMap.setRegion(coordinateRegion, animated: false)

    }

    let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
        regionRadius * 4.0, regionRadius * 4.0)
    OverviewMap.setRegion(coordinateRegion, animated: true)
    isZoomed=true
}

2 个答案:

答案 0 :(得分:1)

此代码应该按照您的意愿执行。当用户点击一个引脚时,didSelectAnnotationView将触发。

var zoomingIn = false
var zoomingAnnotation:MKAnnotation

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView)
{
    let pin = view as! MKPinAnnotationView
    zoomInOnPin(pin.annotation!)
}

func zoomInOnPin(annotation:MKAnnotation) {
    let zoomOutRegion = MKCoordinateRegion(center: mapView.region.center, span: MKCoordinateSpan(latitudeDelta: 0.09, longitudeDelta: 0.09))
    zoomingIn = true
    zoomingAnnotation = annotation
    mapView.setRegion(zoomOutRegion, animated: true)
}

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    if let annotation = zoomingAnnotation where zoomingIn == true {
        zoomingIn = false
        let region = MKCoordinateRegion(center: zoomingAnnotation.coordinate, span: MKCoordinateSpan(latitudeDelta: 0.07, longitudeDelta: 0.07))
        mapView.setRegion(region, animated: true)
    }
}

答案 1 :(得分:0)

在调用下一个setRegion之前,您需要确保已完成一个setRegion动画。

查看MKmapViewDelegate #define WRITE(txt) { \ foo->bar.func = func_xyz; \ foo->bar.xyz.var = (uint32_t)(((uint64_t) (uintptr_t) (txt)) & 0xFFFFFFFFu); \ } //where var is uint32_t 方法。这将允许您对动画的setRegion的完成做出反应并链接下一个setRegion动画。