【问题标题】:Swift: How to smoothly move GMSMarker between 2 coordinaetsSwift:如何在 2 个坐标之间平滑移动 GMSMarker
【发布时间】:2016-10-14 19:05:38
【问题描述】:

我添加了一条路线,还添加了路标。我想沿着路线顺利地将标记从一个 gps 坐标点平滑地移动到另一个坐标点。谁能帮我这个?这是用于添加标记的代码。

func configureMapAndMarkersForRoute() {
  viewGMap.camera = GMSCameraPosition.cameraWithTarget(mapTasks.originCoordinate, zoom: 9.0)

  originMarker = GMSMarker(position: self.mapTasks.originCoordinate)
  originMarker.map = self.viewGMap
  originMarker.icon = GMSMarker.markerImageWithColor(UIColor.greenColor())
  originMarker.title = self.mapTasks.originAddress

  destinationMarker = GMSMarker(position: self.mapTasks.destinationCoordinate)
  destinationMarker.map = self.viewGMap
  destinationMarker.icon = GMSMarker.markerImageWithColor(UIColor.redColor())
  destinationMarker.title = self.mapTasks.destinationAddress

  if waypointsArray.count > 0 {
    var i = 0
    for waypoint in waypointsArray {
      let lat: Double = (waypoint.componentsSeparatedByString(",")[0] as NSString).doubleValue
      let lng: Double = (waypoint.componentsSeparatedByString(",")[1] as NSString).doubleValue

      let marker = GMSMarker(position: CLLocationCoordinate2DMake(lat, lng))
      marker.map = viewGMap
      marker.icon = GMSMarker.markerImageWithColor(UIColor.purpleColor())
      marker.title = locationNameArray[i]
      markersArray.append(marker)
      i += 1
    }
  }
}

【问题讨论】:

  • 为什么每次都加标记?只需沿路径移动单个标记...
  • @kishan94 是的。这就是我想做的。你能帮我解决这个问题吗?
  • 如果您发现我的解决方案正确,请将答案标记为正确。

标签: ios swift xcode google-maps


【解决方案1】:

检查下面的代码...

[CATransaction begin];
[CATransaction setAnimationDuration:5.0];
CGPoint point = [mapView.projection pointForCoordinate:destCoordinate];
//    point.x = point.x + 100;
GMSCameraUpdate *camera =
[GMSCameraUpdate setTarget:[mapView.projection coordinateForPoint:point]];
[mapView animateWithCameraUpdate:camera];
markerToMove.position = destCoordinate;
[CATransaction commit];

遍历你为路径获得的所有点..并将下一个 destCoordinate 设置为每个下一个点 ....

【讨论】:

    【解决方案2】:

    斯威夫特:

    func updateMarker(coordinates: CLLocationCoordinate2D, degrees: CLLocationDegrees, duration: Double) {
        // Keep Rotation Short
        CATransaction.begin()
        CATransaction.setAnimationDuration(0.5)
        marker.rotation = degrees
        CATransaction.commit()
    
        // Movement
        CATransaction.begin()
        CATransaction.setAnimationDuration(duration)
        marker.position = coordinates
    
        // Center Map View
        let camera = GMSCameraUpdate.setTarget(coordinates)
        mapView.animateWithCameraUpdate(camera)
    
        CATransaction.commit()
    }
    

    【讨论】:

    • 我有点怀疑。我想根据服务器的纬度和经度旋转标记
    • @sahil kapoor...我面临一个问题...如果两点之间的距离很大,在这种情况下如何处理动画?
    • 您可以相应增加时长或根据坐标之间的距离进行计算以优化速度。
    【解决方案3】:
    var driverPositionMarker: GMSMarker?
    
    func displayDriverPosition(on mapView: GMSMapView, with coordinate: CLLocationCoordinate2D) {
            if let marker = driverPositionMarker {
                let heading = GMSGeometryHeading(marker.position, coordinate)
                marker.rotation = heading
                marker.position = coordinate
            } else {
                let marker = GMSMarker()
                marker.position = coordinate
                marker.iconView = UIImageView(image: #imageLiteral(resourceName: "CarMarker"))
                marker.map = mapView
                driverPositionMarker = marker
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-25
      • 2019-07-09
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多