Swift地图和地图套件-添加覆盖并将其居中

Swift地图和地图套件-添加覆盖并将其居中,swift,swiftui,mapkit,overlay,Swift,Swiftui,Mapkit,Overlay,我正在学习如何使用SwiftUI和MapKit, 我试着画一个圆,它可以工作,除非我不能在当前的地图中心将圆居中 如何使用MapView.centerCoordinate设置中心 //HERE let center: CLLocationCoordinate2D! = CLLocationCoordinate2D() // How to set center with the map center (MapView.centerCoordina

我正在学习如何使用SwiftUI和MapKit, 我试着画一个圆,它可以工作,除非我不能在当前的地图中心将圆居中

如何使用MapView.centerCoordinate设置中心

        //HERE 
        let center: CLLocationCoordinate2D! = CLLocationCoordinate2D() 
        // How to set center with the map center (MapView.centerCoordinate) ?


首先,您应该在
makeUIView
中设置
mapViewDelegate
,而不是
updateUIView
,因为调用
updateUIView
的次数太多,您只需要设置一次委派

您的问题来自这一行:

mapView.showsUserLocation = true
这意味着,当地图被实例化时,它将自动关注用户的位置

func addCircle(to view: MKMapView) {

    // Lets put a defaut radius of 30 km
    let radius: Double = 30
    if !view.overlays.isEmpty { view.removeOverlays(view.overlays) }
    
    let aCircle = MKCircle(center: view.centerCoordinate, radius: radius * 1000)
    let mapRect = aCircle.boundingMapRect
    
    view.setVisibleMapRect(mapRect, edgePadding: UIEdgeInsets(top: 50, left: 50, bottom: 50, right: 50), animated: true)
    view.addOverlay(aCircle)
}
然后,在my
MKMapViewDelegate
渲染器中:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    guard let circleOverlay = overlay as? MKCircle else {
        return MKOverlayRenderer()
    }
    let circleRenderer = MKCircleRenderer(overlay: circleOverlay)
    circleRenderer.fillColor = .blue
    circleRenderer.alpha = 0.1
    return circleRenderer
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    guard let circleOverlay = overlay as? MKCircle else {
        return MKOverlayRenderer()
    }
    let circleRenderer = MKCircleRenderer(overlay: circleOverlay)
    circleRenderer.fillColor = .blue
    circleRenderer.alpha = 0.1
    return circleRenderer
}