Как плавно анимировать маркер карты Google из одного места в другое в ios - PullRequest
0 голосов
/ 10 октября 2018

У меня есть значок автомобиля на карте Google, который нужно перемещать через регулярные промежутки времени.координаты местоположения будут получены с сервера, и мне удалось изменить местоположение маркера, выполнив приведенный ниже код, но не получил плавного движения

let camera = GMSCameraPosition.camera(withLatitude: (((self.driverArrival.value(forKey: "latitude")) as AnyObject).doubleValue)!,
                                          longitude: (((self.driverArrival.value(forKey: "longitude")) as AnyObject).doubleValue)!, zoom: 15)

    let position = CLLocationCoordinate2DMake((((self.driverArrival.value(forKey: "latitude")) as AnyObject).doubleValue)!, (((self.driverArrival.value(forKey: "longitude")) as AnyObject).doubleValue)!)

    driverMarker.position = position
    driverMarker.map = self.mapView

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

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Пожалуйста, не используйте GMSCameraPosition для перемещения пина на карте

Вы можете использовать метод mapView.animate (toLocation: YOUR_COORDINATES) для плавного перемещения пина на карте

self.mapView.animate(toLocation: CLLocationCoordinate2D(latitude: YOUR_LATITUDE, longitude: YOUR_LONGITUDE))
self.marker.position = coordinate
self.marker.map = self.mapView

Надеждаэто помогает!

0 голосов
/ 10 октября 2018

Попробуйте это ...

Добавьте GMSMapViewDelegate в свой класс,

self.mapView.delegate = self // Вызовите делегата

//MARK - MapView delegates
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
    self.marker.map = mapView;
    self.marker.position = position.target //Your target position
    self.mapView.selectedMarker = self.marker //Your marker
    DispatchQueue.main.async {
        self.marker.snippet = "Getting address... " //Your snippet title 
    }
}

func mapView(_ mapView:GMSMapView, idleAt position:GMSCameraPosition) {
    //Get address with village names and street names
    self.getAddressForLatLng(latitude: "\(position.target.latitude)", longitude: "\(position.target.longitude)", zoomLevel: position.zoom)
}
0 голосов
/ 10 октября 2018

Вы можете использовать animate (to: GMSCameraPosition), чтобы обновить положение на карте с помощью анимации. Пример будет выглядеть так: -

func updateMapLocation(lattitude:CLLocationDegrees,longitude:CLLocationDegrees){
    let camera = GMSCameraPosition.camera(withLatitude: lattitude, longitude: longitude, zoom: 16)
    mapView?.camera = camera
    mapView?.animate(to: camera)
}

и вызовите метод следующим образом

updateMapLocation(lattitude:-33.8683,longitude:151.2086)

Для получения дополнительной информации

Редактировать

Для обновления положения маркера вы можете использовать один маркер и обновить его положение с помощью этого кода

CATransaction.begin()
CATransaction.setAnimationDuration(2.0)
marker.position = coordindates // CLLocationCoordinate2D coordinate
CATransaction.commit()
...