MapKit - 显示用户位置和 MKPolygon 区域的问题

MapKit - problem with showing the user location and the MKPolygon Area

我在尝试显示用户位置和 MKPolygon 区域时遇到问题。

这是关于 MapView.swift 的代码:

import SwiftUI
import MapKit

let model = Model(filename: "ZONE_LIST")
var mapView = MKMapView() // (frame: UIScreen.main.bounds)

var theme = ""

struct MapView: UIViewRepresentable {
    func makeUIView(context: Context) -> MKMapView {
        let latDelta = model.overlayTopLeftCoordinate.latitude - model.overlayBottomRightCoordinate.latitude

        let span = MKCoordinateSpan(latitudeDelta: fabs(latDelta), longitudeDelta: 0.99)
        let region = MKCoordinateRegion(center: model.midCoordinate, span: span)
        
        mapView.showsUserLocation = true
        
        mapView.region = region
        mapView.delegate = context.coordinator

        return mapView
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    func updateUIView(_ uiView: MKMapView, context: UIViewRepresentableContext<MapView>) {}
}

协调器文件改为:

import MapKit

final class Coordinator: NSObject, MKMapViewDelegate {
    var parent: MapView

    init(_ parent: MapView) {
        self.parent = parent
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is MKPolygon {
            let polygonView = MKPolygonRenderer(overlay: overlay)
            
            if theme == "Ciano" {
                polygonView.strokeColor = .cyan
                polygonView.fillColor = .cyan
            } else if theme == "Rosso" {
                polygonView.strokeColor = .init(red: 255/255, green: 0/255, blue: 0/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 255/255, green: 0/255, blue: 0/255, alpha: 1.0)
            } else if theme == "Verde" {
                polygonView.strokeColor = .init(red: 0/255, green: 255/255, blue: 0/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 0/255, green: 255/255, blue: 0/255, alpha: 1.0)
            } else if theme == "Magenta" {
                polygonView.strokeColor = .magenta
                polygonView.fillColor = .magenta
            } else if theme == "Giallo" {
                polygonView.strokeColor = .yellow
                polygonView.fillColor = .yellow
            } else if theme == "Arancione" {
                polygonView.strokeColor = .init(red: 255/255, green: 153/255, blue: 51/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 255/255, green: 153/255, blue: 51/255, alpha: 1.0)
            } else if theme == "Verde Turchese" {
                polygonView.strokeColor = .init(red: 50/255, green: 198/255, blue: 166/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 50/255, green: 198/255, blue: 166/255, alpha: 1.0)
            } else if theme == "Blu" {
                polygonView.strokeColor = .init(red: 0/255, green: 66/255, blue: 255/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 0/255, green: 66/255, blue: 255/255, alpha: 1.0)
            } else {
                polygonView.strokeColor = .init(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0)
            }
            polygonView.alpha = 0.5
            polygonView.lineWidth = 5.0
            
            return polygonView
          }
          return MKOverlayRenderer()
      }
  }

老实说,这是我在尝试将 UserLocation 放在项目上时出错的那一刻的代码,但问题是这样的。我希望有人能帮助我。

好的小子,问题已经被我自己解决了,哈哈。 我只是在 Coordinator.swift 文件中放入了打印标记区域的代码。

final class Coordinator: NSObject, MKMapViewDelegate {
    var parent: MapView

    init(_ parent: MapView) {
        self.parent = parent
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is ModelMapOverlay {
            return ModelMapOverlayView(overlay: overlay, overlayImage: UIImage(imageLiteralResourceName: "overlay_model"))
        } else if overlay is MKPolyline {
            let lineView = MKPolylineRenderer(overlay: overlay)
            lineView.strokeColor = .green
            return lineView
        } else if overlay is MKPolygon {
            let polygonView = MKPolygonRenderer(overlay: overlay)
            if theme == "Ciano" {
                polygonView.strokeColor = .cyan
                polygonView.fillColor = .cyan
            } else if theme == "Rosso" {
                polygonView.strokeColor = .init(red: 255/255, green: 0/255, blue: 0/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 255/255, green: 0/255, blue: 0/255, alpha: 1.0)
            } else if theme == "Verde" {
                polygonView.strokeColor = .init(red: 0/255, green: 255/255, blue: 0/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 0/255, green: 255/255, blue: 0/255, alpha: 1.0)
            } else if theme == "Magenta" {
                polygonView.strokeColor = .magenta
                polygonView.fillColor = .magenta
            } else if theme == "Giallo" {
                polygonView.strokeColor = .yellow
                polygonView.fillColor = .yellow
            } else if theme == "Arancione" {
                polygonView.strokeColor = .init(red: 255/255, green: 153/255, blue: 51/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 255/255, green: 153/255, blue: 51/255, alpha: 1.0)
            } else if theme == "Verde Turchese" {
                polygonView.strokeColor = .init(red: 50/255, green: 198/255, blue: 166/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 50/255, green: 198/255, blue: 166/255, alpha: 1.0)
            } else if theme == "Blu" {
                polygonView.strokeColor = .init(red: 0/255, green: 66/255, blue: 255/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 0/255, green: 66/255, blue: 255/255, alpha: 1.0)
            } else {
                polygonView.strokeColor = .init(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0)
                polygonView.fillColor = .init(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0)
            }
            polygonView.alpha = 0.5
            polygonView.lineWidth = 5.0
            return polygonView
        } else if let character = overlay as? Character {
            let circleView = MKCircleRenderer(overlay: character)
            circleView.strokeColor = character.color
            return circleView
        }
        return MKOverlayRenderer()
    }
}

希望如果有人遇到同样的问题可以看到这个片段来解决它