2017-10-26 1 views
1

Ich habe eine Karte und auf dieser Karte habe ich benutzerdefinierte Anmerkungsstifte. Alle Pins haben dasselbe benutzerdefinierte Bild. Wenn ich auf einen Stift klicke, muss ich das Bild dieser Anmerkung ändern. war ich mit Google Maps vor:Wie ändert man das ausgewählte Pin-Bild im Map Kit in Swift 3?

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 
    if marker.userData as? Int != nil { 
     let marker_tag = marker.userData as! Int 
     Datas.selectedMarkerIndex = marker_tag 

     if let selectedMarker = mapView.selectedMarker { 
      selectedMarker.icon = UIImage(named: "marker_gray") 
     } 
     mapView.selectedMarker = marker 
     marker.icon = UIImage(named: "marker_red")       
    } 
    return true 
} 

Dies funktionierte gut. Aber ich weiß nicht, wie man es mit MapKit macht. Ich möchte nur das ausgewählte Marker- (Pin-) Bild ändern. Wie kann ich das tun?

Auch habe ich versucht, dies aber nicht funktioniert How to change non selected annotation pin images on mapkit with Swift

Und dies ist mein Code:

class CustomPointAnnotation: MKPointAnnotation { 
    var pinImageName:String! 
    var userData:Int! 
} 

extension MyView: MKMapViewDelegate { 

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 
    let reuseIdentifier = "my_pin" 
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier) 

    if annotationView == nil { 
     annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier) 

    } else { 
     annotationView?.annotation = annotation 
    } 

    let customPointAnnotation = annotation as! CustomPointAnnotation 
    annotationView?.isDraggable = false 
    annotationView?.canShowCallout = false 
    annotationView?.layer.anchorPoint = CGPoint(x: 0.5, y: 1) 
    annotationView?.image = UIImage(named: customPointAnnotation.pinImageName) 

    return annotationView 
} 

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { 
    if let anno = view.annotation as? CustomPointAnnotation {    
     let marker_tag = anno.userData! 
     print(marker_tag) 

    } 
} 

func addMarkersOnMap(){ 
    if Datas.myArray.count != 0 { 
     Datas.selectedMarkerIndex = 0 
     for i in 0..<Datas.myArray.count{ 
      let lat = Datas.myArray[i].lat 
      let lng = Datas.myArray[i].lng 

      myArray.append(CustomPointAnnotation())     
      if lat != nil {      
       let location = CLLocationCoordinate2D(latitude: lat!, longitude: lng!) 
       myArray[i].pinImageName = "marker_gray" 
       myArray[i].coordinate = location 
       myArray[i].userData = i 
       pinAnnotationView = MKPinAnnotationView(annotation: myArray[i], reuseIdentifier: "my_pin") 
       mapView.addAnnotation(pinAnnotationView.annotation!) 

     } 
} 
+0

Haben Sie die map.delegate auf selbst eingestellt? –

+0

Ja, natürlich .. – Hilalkah

Antwort

3

"ausgewählt" bedeutet "abgehört"? Wenn ja, versuchen Sie den folgenden Code:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { 
    view.image = UIImage(named: "marker_gray") 
} 

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) { 
    view.image = UIImage(named: "marker_red") 
} 
+1

Danke! Es war so einfach. Und wenn ich draußen auswählen möchte, habe ich diesen Code verwendet: mapView.selectAnnotation (myArray [i], animiert: true) – Hilalkah

Verwandte Themen