25

我要回一个UIImageView in - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;

UIImageView会使用SDWebImage.

正如文档所说的标记信息窗口:

注意:信息窗口每次在地图上显示时都会呈现为图像。这意味着在它处于活动状态时对其属性的任何更改都不会立即可见。信息窗口的内容将在下次显示时刷新。

关键是下载图像后,信息窗口不会刷新并继续显示占位符图像,直到用户隐藏然后再次显示它。

所以我需要强制刷新markerInfoWindow下载的图像块中的内容..

4

6 回答 6

20

在 GoogleMaps iOS SDK 1.13.0 及更高版本中,他们添加了此功能。要启用此功能,只需将tracksInfoWindowChanges属性设置GMSMarkerYES

例子:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
    marker.tracksInfoWindowChanges = YES;

    MyInfoWindow *infoWindow = [[MyInfoWindow alloc] init];
    [infoWindow.imageView sd_setImageWithURL:imageUrl];
    return infoWindow;
}

资源:

于 2016-05-06T05:30:47.937 回答
6

这就是我使用以下解决方法解决问题的方法:

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) {

        }];
    }
于 2013-06-28T18:53:38.483 回答
3

根据您的解释,我了解到您希望在下载图像后刷新当前显示的信息窗口,以便使用新的详细信息重新绘制信息窗口。

您可以执行以下步骤:

1、以编程方式关闭信息窗口

2,以编程方式再次显示相同标记的信息窗口

于 2013-06-27T18:57:38.363 回答
2

基于 Enrico Susatyo 的Swift解决方案:

通过将GMSMarker对象的 trackingInfoWindowChanges 属性设置为 true

marker.title = "my marker"
marker.tracksInfoWindowChanges = true
于 2017-09-12T14:15:54.977 回答
0

@Shady Elyaski 的回答很棒,这是对 Parse 的快速重新解释,以防其他人需要。

    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
                            }
                    }
                }
            }
于 2015-11-14T01:38:09.203 回答
0

你在这 。只需几行简单的代码。这对我来说很完美。在您完成下载图像后立即添加这些代码行,我的意思是在您的 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
              }
            }

然后它的效果真是太棒了。内容立即重新加载新图像基本上您仍然必须将新图像分配给您的marker.image才能在“markerInfoContents”方法中使用它

于 2016-04-05T16:08:46.483 回答