2017-02-04 3 views
1

Я много искал, но не получил никакого точного решения для моего вопроса с контекстом Swift 3. Мне нужно построить несколько маркеров (типа GMSMarker) в моем приложении. Мой код выглядит следующим образом.Google Maps: как добавить несколько маркеров в карты Google

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 
    } 

Даже если я использую массив маркера только одна позиция (последнее значение custlatt, custlong массива) помечается. Может ли кто-нибудь предложить, где я ошибаюсь? Или есть ли другой способ реализации?

ответ

0

Где у вас есть

markerDict[0] = GMSMarker() 

не следует, что быть

markerDict[i] = GMSMarker() 

для этого и последующих 4-х строк?

Я предполагаю, что причина, по которой вы видите только последний маркер, - это то, что предыдущие получают сбор мусора, поскольку вы переписываете единственную ссылку на них на следующей итерации цикла.

+0

Привет, Андрей, я редактировал вопрос, помещая markerDict [i] = GMSMarker(). Но все равно я не получаю, если у вас есть образец кода, вы можете добавить ссылку здесь. –

0

Мгновенное действие GmsMapview вне цикла for решить вашу проблему !!!

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 
} 
    } 
Смежные вопросы