我正在返回UIImageView in - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;
此UIImageView
使用SDWebImage
通过网址动态加载图片。
正如文档中描述的标记信息窗口:
注意:每次在地图上显示信息窗口时,信息窗口都会呈现为图像。这意味着在其属性处于活动状态时对其属性的任何更改都不会立即可见。信息窗口的内容将在下次显示时刷新。
重点是,在下载图像后,信息窗口不会刷新并继续显示占位符图像,直到用户隐藏,然后再显示它。
所以我需要强制刷新下载图像块中markerInfoWindow
的内容..
答案 0 :(得分:21)
在GoogleMaps iOS SDK 1.13.0及更高版本中,他们添加了此功能。要启用此功能,只需将tracksInfoWindowChanges
上的GMSMarker
属性设置为YES
。
示例:
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
marker.tracksInfoWindowChanges = YES;
MyInfoWindow *infoWindow = [[MyInfoWindow alloc] init];
[infoWindow.imageView sd_setImageWithURL:imageUrl];
return infoWindow;
}
来源:
答案 1 :(得分: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) {
}];
}
答案 2 :(得分:3)
根据您的解释,我了解您希望在下载图像后刷新当前显示的信息窗口,以便使用新的详细信息重新绘制信息窗口。
您可以执行以下步骤:
1,Programatically close the infowindow
2,Programatically show the infowindow再次使用相同的标记
答案 3 :(得分:0)
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
}
}
}
}
答案 4 :(得分:0)
你有。只需几行简单的代码。这项工作非常适合我。完成下载图像后立即添加这些代码行 我的意思是在你的完成时。
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"方法
答案 5 :(得分:0)
Swift 基于Enrico Susatyo解决方案:
将GMSMarker对象的 tracksInfoWindowChanges 属性设置为true
marker.title = "my marker"
marker.tracksInfoWindowChanges = true