Ich arbeite an einer GPS-Tracking-App mit GoogleMaps für die Verwendung der Karten.So machen Sie Marker auf GoogleMaps in iOS Ändern Sie seine Position ohne Animation
Momentan arbeite ich an einer einfachen Funktion, sagen wir, es gibt einen Schieberegler und wenn wir den Schieberegler bewegen, bewegt sich der Marker auf der Karte entsprechend dem Marker.
Ich bekomme, was ich tun möchte, aber es gibt nur ein kleines Problem.
Die Position der Marker kann durch diesen Code geändert werden -
marker.position = positionArray[valueFromSlider]
Das einzige Problem, das ich mit dieser Methode gegenüber bin, ist, dass Marker mit der Animation bewegt er sich im normalen Gebrauch Case-Szenario sieht sehr gut aus, aber das Problem Wenn jemand den Schieberegler zu oft verschiebt, folgt der Marker nicht dem richtigen Pfad, dh Polyline
.
Da das Folgen des richtigen Pfads eine Voraussetzung ist, habe ich versucht, den Marker aus der Karte zu entfernen und wieder auf die Karte zu setzen, aber es sieht sehr ruckartig aus und ich habe es mit dem folgenden Code gemacht, wenn die Methode aufgerufen wird).
marker = nil
marker.position = newPosition
marker.map = mapView
mapView.animate(to: GMSCameraPosition(target: newPosition, zoom: 13, bearing: 0, viewingAngle: 0))
und die andere Art und Weise habe ich versucht, es war so, wie ich einfügen bin der eigentliche Code hier auf diese Weise Ergebnis war besser als die oben ein, aber nicht so wollte ich meine, es war nur etwas besser als die über einem
Hierfunc jumpToNext(location: CLLocationCoordinate2D){
mapView.clear()
remap(location: location)
mapView.animate(to: GMSCameraPosition(target: newPosition, zoom: 13, bearing: 0, viewingAngle: 0))
}
ist Erklärung remap
Funktion
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
}
}
Nun, was ich erreichen will, ist, dass, wenn ich ändern, um die Position der Markierung dann einfach disappea rs und erscheint dann an einem neuen Ort, ohne auf der Karte zu animieren.
Was ich will ist, dass, wenn ich die Position des Markers ändere, dann, anstatt in der Animationsweise zu sein, verschwindet es gerade von der gegenwärtigen Position und springt zu einer neuen Position so sogar wenn jemand gleitet sehr schnell, dann deckt er alle dazwischen liegenden Punkte ab. – user3745635