Как сохранить только текущий маркер аннотации в MapKit на iOS (быстро)? - PullRequest
0 голосов
/ 09 мая 2020

Я хотел бы отображать свое текущее местоположение с помощью MapKit (MapView) из внешних GPS-координат (без использования служб определения местоположения iphone). Маркер аннотации, отображающий местоположение новых координат, должен быть единственным, который я хочу сохранить, вместо этого все предыдущие аннотации сохраняются. Значения координат обновляются из ContentView (извлекаются извне).

Как мне отобразить только текущий маркер аннотации (с самым последним местоположением)?

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
var longi = 34.011286
var lati = -116.166868


func makeUIView(context: Context) -> MKMapView {
    MKMapView(frame: .zero)
}

func updateUIView(_ uiView: MKMapView, context: Context) {


    let coordinate = CLLocationCoordinate2D(
        latitude: lati, longitude: longi)
    let pinpoa=MKPointAnnotation()
    pinpoa.coordinate=coordinate
    pinpoa.title="CAR"
    let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
    let region = MKCoordinateRegion(center: coordinate, span: span)
    uiView.setRegion(region, animated: true)
    uiView.addAnnotation(pinpoa)
} 
}

1 Ответ

0 голосов
/ 09 мая 2020

Каждый раз, когда вы добавляете новую аннотацию, вам просто нужно удалить ту, которая уже есть на карте. Итак:

func updateUIView(_ uiView: MKMapView, context: Context) {
    let coordinate = CLLocationCoordinate2D(latitude: lati, longitude: longi)
    let pinpoa=MKPointAnnotation()
    pinpoa.coordinate=coordinate
    pinpoa.title="CAR"
    let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
    let region = MKCoordinateRegion(center: coordinate, span: span)
    uiView.setRegion(region, animated: true)

    let annotations = mapView.annotations
    mapView.removeAnnotations(annotations)  // REMOVE THEM HERE

    uiView.addAnnotation(pinpoa)
}
...