How to force refresh contents of the markerInfoWindow in Google Maps iOS SDK

前端 未结 6 525
悲&欢浪女
悲&欢浪女 2020-12-03 05:04

I\'m returning a UIImageView in - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;

This UIImageView loads imag

相关标签:
6条回答
  • 2020-12-03 05:16

    This is how I fixed the problem using the workaround bellow:

    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) {
    
            }];
        }
    
    0 讨论(0)
  • 2020-12-03 05:22

    Based on your explanation , I understand you are looking to refresh your currently displayed infowindow after an image download so that the infowindow is redrawn with the new details.

    You can do the below steps:

    1, Programatically close the infowindow

    2, Programatically show the infowindow for the same marker again

    0 讨论(0)
  • 2020-12-03 05:27

    @Shady Elyaski's answer is great, here's a swift reinterpretation with Parse, incase anyone else needs a had.

        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
                                }
                        }
                    }
                }
    
    0 讨论(0)
  • 2020-12-03 05:38

    In GoogleMaps iOS SDK 1.13.0 and above, they have added this functionality. To enable this, simply set the tracksInfoWindowChanges property on GMSMarker to YES.

    Example:

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

    Source:

    • https://code.google.com/p/gmaps-api-issues/issues/detail?id=5559
    • https://developers.google.com/maps/documentation/ios-sdk/releases#version_1131_-_may_02_2016
    0 讨论(0)
  • 2020-12-03 05:39

    There you are . just a few lines of simple code . This work perfectly for me . Add these lines of code right after you finish download an image I mean in your completionBlock .

         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
                  }
                }
    

    Then it works so freaking awesome . The content are reloaded with new image immediately Basically you still have to assign new image to your marker.image to use it in your "markerInfoContents" method

    0 讨论(0)
  • 2020-12-03 05:40

    Swift based on Enrico Susatyo solution:

    by setting the tracksInfoWindowChanges property of GMSMarker object to true

    marker.title = "my marker"
    marker.tracksInfoWindowChanges = true
    
    0 讨论(0)
提交回复
热议问题