【发布时间】:2021-12-28 23:50:57
【问题描述】:
我想在点击图钉后切换 MKPointAnnotation 标题的可见性。我尝试直接在func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 中更改标题,但它告诉我它只是一个 get 属性,我无法在我的 Coordinator 类中更改它。
任何帮助将不胜感激!
这里是相关代码...
import SwiftUI
import MapKit
import CoreLocationUI
struct MapViewTest: UIViewRepresentable {
@EnvironmentObject var viewModel: MapViewModel
@Binding var region: MKCoordinateRegion
@Binding var lineCoordinates: [[CLLocationCoordinate2D]]
func makeUIView(context: Context) -> MKMapView {
let mapView = MKMapView()
mapView.delegate = context.coordinator
mapView.region = region
mapView.showsUserLocation = true
return mapView
}
func updateUIView(_ view: MKMapView, context: Context) {
view.setRegion(region, animated: true)
for i in viewModel.locations {
let pin = MKPointAnnotation()
pin.coordinate = i.coordinate
pin.title = i.name
view.addAnnotation(pin)
}
for i in lineCoordinates{
let polyline = MKPolyline(coordinates: i, count: i.count)
view.addOverlay(polyline)
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
}
class Coordinator: NSObject, MKMapViewDelegate {
var parent: MapViewTest
init(_ parent: MapViewTest) {
self.parent = parent
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let routePolyline = overlay as? MKPolyline {
let renderer = MKPolylineRenderer(polyline: routePolyline)
renderer.strokeColor = UIColor.systemBlue
renderer.lineWidth = 10
return renderer
}
return MKOverlayRenderer()
}
}
【问题讨论】:
-
我对你的问题感到困惑。您的标题表示可见性,但您也谈到“更改标题”。是要显示和隐藏标题,还是要重命名注释的标题?
-
抱歉,我想显示/隐藏标题。
标签: swiftui mapkit mkannotation uiviewrepresentable