设置当前区域时为什么更改区域?

时间:2019-02-20 11:34:10

标签: swift mapkit mkoverlay

我放置了一个按钮,以便在给定点上添加一个圆形叠加层。但是我不知道为什么,但是当区域没有改变时,我的覆盖图看不到。

我找不到刷新或重新加载地图的功能。因此,最终我决定稍微更改地图区域,以免打扰用户。 (例如,缩小一点。)

self.mapView.setRegion(mapView.region, animated: true)

我希望上面的代码不会更改地图区域,但是它确实会更改地图区域,

self.mapView.setRegion(MKCoordinateRegion(mapView.visibleMapRect), animated: true)

这也改变了地图的区域。

我该怎么办?

这就是我添加叠加层的方式

func addCircles() {

    let center = self.myPinView.center
    let origin = self.mapView.convert(center, toCoordinateFrom: mapView)
    let overlay1 = MKCircle(center: origin, radius: 3)
    let overlay2 = MKCircle(center: origin, radius: 7.5)
    let overlay3 = MKCircle(center: origin, radius: 15)
    self.mapView.addOverlay(overlay1)
    self.mapView.addOverlay(overlay2)
    self.mapView.addOverlay(overlay3)

}

这是我的代理函子

func mapView(_ mapView:MKMapView,rendererFor overlay:MKOverlay)-> MKOverlayRenderer {

if overlay is MKCircle {

        let circle = MKCircleRenderer(overlay: overlay)
        circle.fillColor = circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.6)
        circle.strokeColor = .red
        return circle

    } else {
        return MKOverlayRenderer()
    }

}

2 个答案:

答案 0 :(得分:0)

尝试将它们封装在dsipatchQueue.main

DispatchQueue.main.async {
self.mapView.setRegion(mapView.region, animated: true)
}

答案 1 :(得分:0)

实际上,我用不同的观点解决了我的特殊问题。我最初的问题是,在用户选择位置后,我想画一个圆。但是,直到地图区域更改,我的叠加层才会出现。我试图立即画出这个圆圈。我找到的最用户友好的解决方案是将mapView中心设置为叠加层的中心。

self.mapView.setCenter(origin, animated: false)

这样,用户选择位置后,立即将地图焦点放在该位置并显示叠加层。