我要回来了 UIImageView in - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;
这UIImageView将通过URL动态加载图像SDWebImage.
正如文档中描述的标记信息窗口:
注意:每次在地图上显示信息窗口时,信息窗口都会呈现为图像.这意味着在其属性处于活动状态时对其属性的任何更改都不会立即可见.信息窗口的内容将在下次显示时刷新.
关键是在下载图像后,信息窗口不刷新并继续显示占位符图像,直到用户隐藏然后再显示它.
所以我需要强制刷新markerInfoWindow下载的图像块中的内容.
我正在尝试将图像动态加载到信息窗口中。问题是 SDWebImage 永远不会完成。但是,一旦我再次单击标记,图像就会显示并完成,但不会在第一次被调用。我的“运行”日志第一次显示,所以我知道代码正在被调用,但在第一次运行时不会显示完整,除非图像被缓存,在这种情况下它会显示在第二个标记点上。
旁注:我将图像的链接存储在片段中,因为我没有其他用途。
任何想法为什么 SDWebImage 不完整?或者有没有其他人能想到的更好的方法?
我在文档块下看到的最后一件事它说以下似乎适合但我不知道我是如何取消请求以导致这种行为的。
注意:如果您的图像请求在完成之前被取消,则不会调用您的成功块和失败块。
bool tapped = NO;
-(BOOL) mapView:(GMSMapView *) mapVieW didTapMarker:(GMSMarker *)marker{
tapped=YES;
[mapVieW setSelectedMarker:marker];
return YES;
}
- (UIView *)mapView:(GMSMapView *)mapVieW markerInfoWindow:(GMSMarker *)marker{
if([marker.snippet isEqualToString:@""] || [marker.snippet isEqualToString:nil]){
//no image
tapped = NO;
//code here
return view;
}else{
//image
//code for custom view which is unimportant
if(tapped){
NSLog(@"run");
[image setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", URL_PREFIX, marker.snippet]] placeholderImage:[UIImage imageNamed:@"you"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
NSLog(@"complete");
tapped=NO;
[mapView setSelectedMarker:nil];
[mapView setSelectedMarker:marker];
}]; …Run Code Online (Sandbox Code Playgroud)