У меня проблемы с добавлением нескольких маркеров в mapView - PullRequest
0 голосов
/ 21 мая 2019

У меня проблемы с добавлением нескольких маркеров в mapView, но я всегда заканчиваю тем, что показываю один маркер, который является последним вызванным маркером, я не знаю почему.цель этого состоит в том, чтобы получить данные, которые содержат широты и долготы и добавить эти маркеры, я пытаюсь сделать это статическим, но я могу показать несколько маркеров

я создал функцию, которая добавляет новый маркер ия называю это в viewDidLoad `переопределить func viewDidLoad () {super.viewDidLoad ()

        AddMarker(title: "pala", snippet: "nanana", latitude: 35.741522, longitude: 9.805937)


        AddMarker(title: "pala", snippet: "nanana", latitude: 36.89939467218524, longitude: 10.187976658321267)



    }
    private func AddMarker(title:String , snippet:String  , latitude:Double , longitude:Double){
        var title = title
        var snippet = snippet
        var latitude = latitude
        var longitude = longitude

        let camera = GMSCameraPosition.camera(withLatitude: latitude, longitude: longitude, zoom: 6.0)
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView

        // Creates a marker in the center of the map.
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
        marker.title = title
        marker.snippet = snippet
        marker.map = mapView
    }

`

1 Ответ

1 голос
/ 21 мая 2019

Создайте экземпляр GMSMapView как свойство экземпляра вне метода addMarker.А в методе addMarker измените положение камеры и добавьте маркеры.

let mapView = GMSMapView()

private func addMarker(title:String, snippet:String , latitude:Double , longitude:Double){
    let camera = GMSCameraPosition.camera(withLatitude: latitude, longitude: longitude, zoom: 6.0)
    self.mapView.animate(to: camera)

    // Creates a marker in the center of the map.
    let marker = GMSMarker()
    marker.position = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    marker.title = title
    marker.snippet = snippet
    marker.map = mapView
}

При добавлении нескольких маркеров один за другим не анимируйте положение камеры в последней позиции маркера.Чтобы показать все маркеры в просмотре карты, вы можете использовать GMSCoordinateBounds

let mapView = GMSMapView()
var bounds = GMSCoordinateBounds()

override func viewDidLoad() {
    super.viewDidLoad()
    addMarker(title: "pala", snippet: "nanana", latitude: 35.741522, longitude: 9.805937)
    addMarker(title: "pala", snippet: "nanana", latitude: 36.89939467218524, longitude: 10.187976658321267)
}
private func addMarker(title:String, snippet:String , latitude:Double , longitude:Double){
    // Creates a marker in the center of the map.
    let marker = GMSMarker()
    marker.position = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    marker.title = title
    marker.snippet = snippet
    marker.map = mapView

    bounds = bounds.includingCoordinate(marker.position)
    let update = GMSCameraUpdate.fit(bounds, withPadding: 50)
    mapView.animate(with: update)
}
...