2017-02-20 1 views
-2

Anzeige habe ich eine benutzerdefinierte Anmerkung Ansicht namens „PlaceAnnotationView“ wie unten dargestellt:AnnotationView Nicht

import Foundation 
import MapKit 

class PlaceAnnotationView : MKPinAnnotationView { 

    override init(annotation: MKAnnotation?, reuseIdentifier: String?) { 

     super.init(annotation: annotation, reuseIdentifier: reuseIdentifier) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

Dann in viewForAnnotation ich meine benutzerdefinierten Anmerkungsansicht zurückzukehren, wie gezeigt:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 

     if annotation is MKUserLocation { 
      return nil 
     } 

     var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "PlaceAnnotationView") 

     if annotationView == nil { 
      annotationView = PlaceAnnotationView(annotation: annotation, reuseIdentifier: "PlaceAnnotationView") 
      annotationView?.canShowCallout = true 
     } 

     return annotationView 
} 

Hier ist der Code Anmerkungen hinzufügen:

private func populateNearByPlaces() { 

     var region = MKCoordinateRegion() 
     region.center = CLLocationCoordinate2D(latitude: self.mapView.userLocation.coordinate.latitude, longitude: self.mapView.userLocation.coordinate.longitude) 

     let request = MKLocalSearchRequest() 
     request.naturalLanguageQuery = self.selectedCategory 
     request.region = region 

     let search = MKLocalSearch(request: request) 
     search.start { (response, error) in 

      guard let response = response else { 
       return 
      } 

      for item in response.mapItems { 

       let annotation = PlaceAnnotation() 
       annotation.title = item.name 
       annotation.subtitle = "subtitle" 
       annotation.mapItem = item 

       DispatchQueue.main.async { 
        self.mapView.addAnnotation(annotation) 
       } 


      } 

     } 


    } 

Hier ist der Code für PlaceAnnotati OnView:

import Foundation 
import MapKit 

class PlaceAnnotationView : MKPinAnnotationView { 

    override init(annotation: MKAnnotation?, reuseIdentifier: String?) { 

     super.init(annotation: annotation, reuseIdentifier: reuseIdentifier) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

Hier ist der Code für PlaceAnnotation:

Import Foundation Import MapKit

class PlaceAnnotation : MKPointAnnotation { 

    var mapItem :MKMapItem! 

} 

Aber ich sehe keine meiner Anmerkungen auf der Karte angezeigt werden. Die viewForAnnotation wird für jede meiner Anmerkungen mehrere Male ausgelöst, aber nichts auf dem Bildschirm angezeigt.

+0

Wie haben Sie Ihre MKAnnotation hinzugefügt? Kannst du uns den Code dafür zeigen? –

+0

Sie müssen viel mehr Code zeigen. Zeigen Sie, wo Sie Anmerkungen zur Kartenansicht hinzufügen. Zeigen Sie PlaceAnnotationView an. Beachten Sie auch, dass Ihre Implementierung von 'viewForAnnotation' für den Fall falsch aussieht, in dem eine Anmerkungsansicht wiederverwendet wird. Sie können die Annotation der Annotation nicht festlegen. – matt

+0

@matt Ich habe den Code aktualisiert. Ich bin mir nicht sicher, ob ich verstehe, was Sie mit der Implementierung von viewForAnnotation falsch sehen. –

Antwort

1

Basierend auf dem Code, den Sie (so widerwillig) ausgewählt haben, um anzuzeigen, scheint es das Problem ist, dass Sie nie die coordinate der Annotation festlegen. Aber eine Anmerkung coordinate ist entscheidend. So sagt die Annotation, wo sie in der Welt sein soll und wie die Annotation-Ansicht, die dieser Annotation zugeordnet ist, weiß, wo auf der Map sie erscheinen soll. Daher kann die Annotation-Ansicht, die mit dieser Annotation verknüpft ist, nicht wissen, wo auf der Karte angezeigt werden soll. Daher erscheint nicht erscheint.

+0

Danke! Huch, ich habe vergessen, die Koordinaten für die Annotation zu setzen :) –

Verwandte Themen