如何在Google Maps iOS SDK中强制刷新markerInfoWindow的内容

Sha*_*ski 25 google-maps-markers google-maps-sdk-ios gmsmapview

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

UIImageView将通过URL动态加载图像SDWebImage.

正如文档中描述的标记信息窗口:

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

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

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

Enr*_*tyo 21

在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;
}
Run Code Online (Sandbox Code Playgroud)

资源:

  • 从建议开始的时候为什么要花3年时间实施呢?多数民众赞成 (2认同)

Sha*_*ski 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) {

        }];
    }
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不再正确,请参阅下面的@Enrico Susatyo的回答(http://stackoverflow.com/a/37064936/1305067). (2认同)