2017-09-20 2 views
0

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

Hier
func 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.

+0

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

Antwort

-1

GMSMarker hat opacity Eigenschaft. Sie können ihn auf 0 setzen, dann position setzen und opacity wieder auf 1 setzen (mit etwas Verzögerung).

+0

Mann, Danke für die Antwort. Aber das wird nicht funktionieren, weil das Problem, mit dem ich konfrontiert bin mit "marker.location = newLocation" ist, dass es nicht richtig animiert. Also möchte ich nur die Animation entfernen. – user3745635

0

was passiert, wenn wir die Markierung entfernen,

marker.map = nil 

und fügen Sie einen neuen Marker an neuem Standort mit, was Ihr Problem lösen ..

func jumpToNext(location: CLLocationCoordinate2D){ 
     marker.map = nil 
     remap(location: location) 
     mapView.animate(to: GMSCameraPosition(target: newPosition, zoom: 13, bearing: 0, viewingAngle: 0)) 
} 
func remap (location: CLLocationCoordinate2D){ 
     marker = GMSMarker(position: location) 
     marker.map = bottomMap 
     //other stuff you want to do you can do that here 
} 

Diese Animation Problem lösen soll.

Verwandte Themen