SDWebImage 在 Google Maps InfoWindow 中不工作

SDWebImage not working in Google Maps InfoWindow

我正在尝试通过 SDWebImage 加载放置在 InfoWindow 中的图像。

首次打开此 InfoWindow mainLogoImageView 时仅放置占位符。在第二个加载的图像上。问题是第一次打开 InfoWindow 时无法加载图像(这与我等待加载图像的时间无关)

func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! { 

var infoWindow : CustomInfoWindow = NSBundle.mainBundle().loadNibNamed("CustomInfoWindow", owner: self, options: nil)[0] as CustomInfoWindow

infoWindow.mainLogoImageView.sd_setImageWithURL(NSURL(string: self.sharedManager.myModel[0].img_logo), placeholderImage: UIImage(named: "logo_placeholder.png"))

return infoWindow

}

感谢您的帮助

我想我可能找到了解决您的问题的方法。我在 Objective-C 中写了我的代码,希望你能把它翻译成 Swift。

如果你想获得完成回调,那么你可以尝试使用SDWebImageMannagerdownloadImageWithURL方法。

但是为了让图片第一时间显示出来,你还需要有一个实例变量。

所以首先,您需要声明一个索引计数器实例变量:

int counter = 0; 可能 var counter = 0; 在 Swift

然后在您的委托方法中,您可以执行以下操作:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker{

    InfoWindow *view =  [[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];

    couter++;

   [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"https://myimage.png"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        NSLog(@"in progress");
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
        NSLog(@"complete");
        view.imageView.image = image;
        if (counter == 1) {
            self.mapView.selectedMarker = marker;
        }

    }];

    return view;
}

在 mapView 函数中插入 marker.tracksInfoWindowChanges = true;

Answer to your question

func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) UIView! {   
   marker.tracksInfoWindowChanges = true;
   var infoWindow : CustomInfoWindow = NSBundle.mainBundle().loadNibNamed("CustomInfoWindow", owner: self, options: nil)[0] as CustomInfoWindow
   infoWindow.mainLogoImageView.sd_setImageWithURL(NSURL(string: self.sharedManager.myModel[0].img_logo), placeholderImage: UIImage(named: "logo_placeholder.png"))

   return infoWindow
}