【发布时间】:2019-01-02 06:08:16
【问题描述】:
我正在开发一个 GPS 跟踪应用程序,使用 GoogleMaps 来使用地图。
现在我正在开发一个简单的功能,假设有一个滑块,当我们移动滑块时,地图上的标记会相应地移动。
我正在做我想做的事,但只是一个小问题。
标记的位置可以通过这段代码改变 -
marker.position = positionArray[valueFromSlider]
我使用这种方法面临的唯一问题是标记随着动画移动,它在正常用例场景中看起来非常好,但出现的问题是,如果有人过于频繁地滑动滑块,那么标记不会遵循正确的路径,即Polyline。
因为遵循正确的路径是一项要求,所以我尝试从地图上移除标记并再次将其放在地图上,但它看起来非常生涩,每当调用该方法时,我都通过以下代码执行此操作(滑块移动) .
marker = nil
marker.position = newPosition
marker.map = mapView
mapView.animate(to: GMSCameraPosition(target: newPosition, zoom: 13, bearing: 0, viewingAngle: 0))
我尝试过的另一种方法是我在这里粘贴实际代码,结果比上面的要好,但不是如预期的那样,我的意思是它比上面的稍微好一点
func jumpToNext(location: CLLocationCoordinate2D){
mapView.clear()
remap(location: location)
mapView.animate(to: GMSCameraPosition(target: newPosition, zoom: 13, bearing: 0, viewingAngle: 0))
}
这是remap函数的声明
func setMarkerOnMap(location: CLLocationCoordinate2D){
marker = nil
marker = GMSMarker(position: location)
marker.map = bottomMap
path.add(location)
path = GMSMutablePath()
for (index, locationB) in subTrips.enumerated(){
path = GMSMutablePath()
var polylineColor = UIColor()
switch locationB.speed {
case 0..<20:
polylineColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 1)
case 20..<40:
polylineColor = UIColor(colorLiteralRed: 0, green: 162/255, blue: 232/255, alpha: 1)
case 40..<60:
polylineColor = UIColor(colorLiteralRed: 34/255, green: 117/255, blue: 76/255, alpha: 1)
case 60..<80:
polylineColor = UIColor(colorLiteralRed: 255/255, green: 255/255, blue: 0, alpha: 1)
case 80..<100:
polylineColor = UIColor(colorLiteralRed: 255/255, green: 165/255, blue: 0/255, alpha: 1)
print("crossed 80 at index ", index)
default:
polylineColor = UIColor(colorLiteralRed: 237/255, green: 28/255, blue: 36/255, alpha: 1)
print("crossed 100 at index ", index)
}
if index == 0{
path.add(CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude))
path.add(CLLocationCoordinate2D(latitude: locationB.latitude, longitude: locationB.longitude))
} else{
path.add(CLLocationCoordinate2D(latitude: subTrips[index - 1].latitude, longitude: subTrips[index - 1].longitude))
path.add(CLLocationCoordinate2D(latitude: locationB.latitude, longitude: locationB.longitude))
}
var polyline = GMSPolyline()
polyline.path = self.path
polyline.map = self.bottomMap
polyline = GMSPolyline(path: path)
polyline.strokeColor = polylineColor
polyline.geodesic = true
polyline.strokeWidth = 2.0
polyline.map = bottomMap
}
}
现在我想要实现的是,当我更改标记的位置时,它会消失,然后出现在新位置,而不在地图上显示动画。
【问题讨论】:
-
我想要的是,当我改变标记的位置时,它不会以动画方式从当前位置消失并跳转到一个新位置,所以即使有人滑动得很快涵盖了两者之间的所有点。
标签: ios swift google-maps google-maps-sdk-ios