SwiftUI 地图显示注释

Rex*_*xha 6 ios swift swiftui ios14 xcode12

我决定从将 MKMapView 包装到 UIViewRepresentable 中切换到Map()SwiftUI 中的新包装。

我能够MKMapRect在 中正确显示 a Map(),但无法MKPointAnnotation在那里显示 2。另外,我在这些注释之间的路线没有显示

它要求我提供一个RandomAccessCollection和一个(Identifiable) -> MapAnnotationProtocol>,但我不知道该放什么。

知道我应该放什么吗(Identifiable) -> MapAnnotationProtocol

import SwiftUI
import MapKit

extension MKPointAnnotation: Identifiable { }

struct ItemView: View {
    @ObservedObject var itemViewModel: ItemViewModel
    @State var coll = [MKPointAnnotation]()
    
    func onAppear() {
        let requestAnnotation = MKPointAnnotation()
        requestAnnotation.coordinate = CLLocationCoordinate2D(latitude: 46.2004781, longitude: 6.1346497)
        requestAnnotation.title = "Package"
        
        let destinationAnnotation = MKPointAnnotation()
        destinationAnnotation.coordinate = CLLocationCoordinate2D(latitude: 47.1420446, longitude: 9.5204032)
        destinationAnnotation.title = "Destination"
        
        coll.append(requestAnnotation)
        coll.append(destinationAnnotation)
    }
    
    var body: some View {
        VStack {
            if let mapRect = itemViewModel.route?.polyline.boundingMapRect {
                Map(mapRect: .constant(mapRect), annotationItems: coll) { point in
                  MapAnnotation(coordinate: point.coordinate) {
                      Text(point.title ?? "")
                  }
                }
            }
        }
        .onAppear(perform: self.onAppear)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 1

它应该如下所示(由于提供的快照中缺少依赖项而未测试)

Map(mapRect: .constant(mapRect), annotationItems: coll) { point in
   MapAnnotation(coordinate: point.coordinate) {
    Text(point.title ?? "")
   }
}
Run Code Online (Sandbox Code Playgroud)