started route google gmscameraupdate getting for google-maps-markers google-maps-sdk-ios gmsmapview

google-maps-markers - route - polyline google maps swift



Cómo forzar la actualización del contenido de markerInfoWindow en el SDK de iOS de Google Maps (6)

Ahí tienes . Sólo unas pocas líneas de código simple. Esto funciona perfectamente para mí. Agregue estas líneas de código justo después de que termine de descargar una imagen que quiero decir en su conclusión Bloquear.

let image = UIImage(contentsOfFile: fileURL.path!) marker.image = image if(self.mapView.selectedMarker != nil) { if(self.mapView.selectedMarker == marker) { self.mapView.selectedMarker = nil self.mapView.selectedMarker = marker } }

Entonces funciona tan increíble. El contenido se vuelve a cargar con la nueva imagen inmediatamente. Básicamente, todavía tiene que asignar una nueva imagen a su marker.image para usarla en su método "markerInfoContents"

Estoy devolviendo un UIImageView in - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;

Este UIImageView carga imágenes dinámicamente a través de una URL usando SDWebImage .

Como dice la documentación sobre las ventanas de información de marcadores:

Nota: la ventana de información se representa como una imagen cada vez que se muestra en el mapa. Esto significa que cualquier cambio en sus propiedades mientras esté activo no será visible inmediatamente. El contenido de la ventana de información se actualizará la próxima vez que se muestre.

El punto es que, después de descargar la imagen, la ventana de información no se actualiza y sigue mostrando la imagen del marcador de posición hasta que el usuario se oculta, luego vuelve a mostrarla.

Así que necesito forzar la actualización del contenido de markerInfoWindow en el bloque de imagen descargada.


Así es como solucioné el problema usando la solución siguiente:

UIImage *img = [[SDWebImageManager sharedManager] imageWithURL:[NSURL URLWithString:Img_URL]]; //Img_URL is NSString of your image URL if (img) { //If image is previously downloaded set it and we''re done. [imageView setImage:img]; }else{ [imageView setImageWithURL:[NSURL URLWithString:Img_URL] placeholderImage:[UIImage imageNamed:@"defaultPin"] success:^(UIImage *image, BOOL cached) { if (!marker.snippet || !cached) { [marker setSnippet:@""]; //Set a flag to prevent an infinite loop if (mapView.selectedMarker == marker) { //Only set if the selected marker equals to the downloaded marker [mpVu setSelectedMarker:marker]; } } } failure:^(NSError *error) { }]; }


En GoogleMaps iOS SDK 1.13.0 y superior, han agregado esta funcionalidad. Para habilitar esto, simplemente configure la propiedad GMSMarker en GMSMarker en YES .

Ejemplo:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { marker.tracksInfoWindowChanges = YES; MyInfoWindow *infoWindow = [[MyInfoWindow alloc] init]; [infoWindow.imageView sd_setImageWithURL:imageUrl]; return infoWindow; }

Fuente:


La respuesta de @Shady Elyaski es genial, aquí hay una rápida reinterpretación con Parse, en caso de que alguien más necesite un disco.

var eventThumb:UIImage? ... func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! { ... //set up the rest of your view... if let eventImgExists = eventThumb { eventImg.image = eventImgExists self.eventThumb = nil } else { if let currentEventThumb = currentEvent["thumbnail"] as? PFFile { currentEventThumb.getDataInBackgroundWithBlock { (imageData, error) -> Void in if error == nil { let image = UIImage(data: imageData!) eventImg.image = image self.eventThumb = image self.eventsMap.selectedMarker = self.eventsMap.selectedMarker } } } }



Swift basado en la solución de Enrico Susatyo:

estableciendo la propiedad tracksInfoWindowChanges del objeto GMSMarker en true

marker.title = "my marker" marker.tracksInfoWindowChanges = true