2016-06-23 10 views
5

Ich zeige eine Markierung an einem bestimmten Ort an, zusammen mit der Anzeige der aktuellen Adresse in der Adressbeschriftung in Google Maps.Wie verschiebe ich Marker zusammen mit dem Verschieben von Google Map in iOS?

Jetzt möchte ich den Standort durch Verschieben der Google Map ändern, aber das Problem ist, dass wenn ich die Karte verschiebe, ich gleichzeitig den Marker mit der Karte verschieben sollte, und ich sollte die Adresse dieses Ortes anzeigen im Adressaufkleber.

Wie kann ich das tun? diese

Ich habe versucht:

let destinationMarker = GMSMarker(position: self.destinationLocation.coordinate) 

let image = UIImage(named:"sourcemarker") 
destinationMarker.icon = image 
destinationMarker.draggable = true 
destinationMarker.map = self.viewMap 
//viewMap.selectedMarker = destinationMarker 
destinationMarker.title = "hi" 
destinationMarker.userData = "changedestination" 

func mapView(mapView: GMSMapView, didEndDraggingMarker marker: GMSMarker) 
{ 
    if marker.userData as! String == "changedestination" 
    { 
     self.destinationLocation = CLLocation(latitude: marker.position.latitude, longitude: marker.position.longitude) 
     self.destinationCoordinate = self.destinationLocation.coordinate 
     //getAddressFromLatLong(destinationCoordinate) 
    } 
} 

Antwort

8
// UpdteLocationCoordinate 
    func updateLocationoordinates(coordinates:CLLocationCoordinate2D) { 
     if destinationMarker == nil 
     { 
      destinationMarker = GMSMarker() 
      destinationMarker.position = coordinates 
      let image = UIImage(named:"destinationmarker") 
      destinationMarker.icon = image 
      destinationMarker.map = viewMap 
      destinationMarker.appearAnimation = kGMSMarkerAnimationPop 
     } 
     else 
     { 
      CATransaction.begin() 
      CATransaction.setAnimationDuration(1.0) 
      destinationMarker.position = coordinates 
      CATransaction.commit() 
     } 
    } 

    // Camera change Position this methods will call every time 
    func mapView(mapView: GMSMapView, didChangeCameraPosition position: GMSCameraPosition) { 
     let destinationLocation = CLLocation() 
     if self.mapGesture == true 
     { 
      destinationLocation = CLLocation(latitude: position.target.latitude, longitude: position.target.longitude) 
      destinationCoordinate = destinationLocation.coordinate 
      updateLocationoordinates(destinationCoordinate) 
     } 
    } 
1

Basierend von Release Notes in Maps-SDK für iOS gemacht, einen Marker Position zu ändern bewirkt, dass der Marker an den neuen Standort animieren.

Um dies zu beheben, können Sie neue Funktionen für GMSMarker verwenden, wie in Release Version 1.5 wie angegeben:

  • Marker ziehbar gemacht werden kann, die Eigenschaft draggable verwenden und neue Drag Delegatmethoden zu GMSMapViewDelegate hinzugefügt wurden. (Ausgabe 4975)
  • GMSMarkerLayer hinzugefügt, eine benutzerdefinierte CALayer-Unterklasse für GMSMarker, die die Animation der Markerposition und -rotation unterstützt. (Ausgabe 4951, Ausgabe 5743)

Zusätzlich zu, dass dieser Beitrag in GitHub - GoogleMapsAnimationGlitch und die SO Post - How to smoothly move GMSMarker along coordinates in Objective c könnte auch helfen.

+0

Sie danken @Teyam ... es funktioniert ... –

+0

@Teyam .. Ich habe kleine Zweifel. Ich arbeite mit Google Maps. Wenn der Standort aktualisiert wird, animiert auch meine Kartenansicht. Bitte helfen Sie mir. –

1

Es gibt einen Trick, der Ihnen hier helfen kann. Anstatt hier einen GMSMarker zu verwenden, lege ein Bild in die Mitte, über dein Google MapView.

Sie können ganz einfach die Koordinaten der Karte Zentrum finden dies mit:

double latitude = mapView.camera.target.latitude; 
double longitude = mapView.camera.target.longitude; 

Oder diese

GMSCoordinateBounds *bounds = nil; 
bounds = [[GMSCoordinateBounds alloc] initWithRegion: visibleRegion]; 

CLLocationCoordinate2D centre = CLLocationCoordinate2DMake(
                  (bounds.southWest.latitude + bounds.northEast.latitude)/2, 
                  (bounds.southWest.longitude + bounds.northEast.longitude)/2); 

Jetzt können Sie mithilfe von Geocoding API von Google den Standort-Adresse. Hier

ist die Referenz: https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_geocoder

Sie können Adresse aktualisieren, wenn dieser Delegat-Methode aufgerufen wird:

- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 

Hoffnung, das hilft.

+0

danke @Bharat Bachani –

1

Update für Swift 4:

Zuerst müssen Sie mit dem GMSMapViewDelegate entsprechen:

extension MapsVC: GMSMapViewDelegate{ 

Und dann stellen Sie Ihren VC als Delegierter von viewmap im viewDidLoad()

viewMap.delegate = self 

Danach müssen Sie nur die folgende Methode verwenden, um Updates von der Kamera Positio zu erhalten n und festgelegt, dass als die neue Position für den Marker:

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) { 
    destinationMarker.position = position.target 
    print(destinationMarker.position) 
}