为什么设置当前区域时区域发生变化?

Why region is changed when I am setting current region?

我放了一个按钮,以便在给定点上添加一个圆圈叠加层。但是我不知道为什么,虽然区域没有改变,但我的叠加层看不到。

我找不到刷新或重新加载地图的功能。所以最后我决定稍微改变地图区域,这样用户就不会受到干扰。 (例如缩小一点)。

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()
    }

}

尝试将它们封装在一个dsipatchQueue.main

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

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

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

这样,用户选择一个位置后,立即将地图聚焦到该位置并显示叠加。