2017-02-04 6 views
1

Ich suchte viel, aber bekam keine genaue Lösung für meine Frage mit Swift 3 Kontext. Ich muss mehrere Marker (vom Typ GMSMarker) in meiner Anwendung plotten. Mein Code ist wie folgt.Google Maps: Wie man mehrere Markierungen zu Google Maps hinzufügt

var markerDict: [Int: GMSMarker] = [:] 
var custlatt = [13.093781,13.034893,13.034893] 
var custlong = [77.576284,77.596372, 77.596372] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    for i in 0...2{ 
     let camera = GMSCameraPosition.camera(withLatitude:custlatt[i], longitude: custlong[i], zoom: 10.0) 
     let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 
     view = mapView 

     markerDict[i] = GMSMarker() 
     markerDict[i]?.position = CLLocationCoordinate2D(latitude:custlatt[i], longitude: custlong[i]) 
     markerDict[i]?.title = "NAGAVARA" 
     markerDict[i]?.snippet = "Bengaluru" 
     markerDict[i]?.map = mapView 
    } 

Obwohl ich Reihe von Marker bin mit nur einer Position (letzter Wert von custlatt, custlong Array) markiert wird. Kann jemand vorschlagen, wo ich falsch liege? Oder gibt es eine andere Methode der Implementierung?

Antwort

0

Wo Sie

markerDict[0] = GMSMarker() 

haben sollte, dass nicht

markerDict[i] = GMSMarker() 

für diese und die nächsten 4 Zeilen sein?

Ich stelle mir vor, der Grund, dass Sie nur die letzte Markierung sehen, ist, dass die vorherigen Garbage-Collection erhalten, da Sie die einzige Referenz auf sie bei der nächsten Iteration der Schleife überschreiben.

+0

Hallo Andrew, ich habe die Frage bearbeitet, indem ich markerDict [i] = GMSMarker() gesetzt habe. Aber ich bekomme immer noch nicht, wenn Sie Sample Code Repo haben, können Sie den Link hier hinzufügen. –

0

Instantiate GmsMapview außerhalb der for-Schleife lösen Sie Ihr Problem!

class MapVC:UIViewController{ 

    var markerDict: [String: GMSMarker] = [:] 
    var custlatt = [13.093781,13.034893,13.034893] 
    var custlong = [77.576284,77.596372, 77.596372] 
    var mapView:GMSMapView! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    mapView = GMSMapView() 
    mapView.frame = self.view.frame 
    setupViews() 
    for (i, element) in (["first","second","third"]).enumerated(){ 
     let camera = GMSCameraPosition.camera(withLatitude:custlatt[i], longitude: custlong[i], zoom: 10.0) 
     mapView.camera = camera 

     markerDict[element] = GMSMarker() 
     markerDict[element]?.position = CLLocationCoordinate2D(latitude:custlatt[i], longitude: custlong[i]) 
     markerDict[element]?.title = element 
     markerDict[element]?.snippet = element 
     markerDict[element]?.map = mapView 
} 
    } 
Verwandte Themen