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。
如果你想获得完成回调,那么你可以尝试使用SDWebImageMannager
的downloadImageWithURL
方法。
但是为了让图片第一时间显示出来,你还需要有一个实例变量。
所以首先,您需要声明一个索引计数器实例变量:
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
}
我正在尝试通过 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。
如果你想获得完成回调,那么你可以尝试使用SDWebImageMannager
的downloadImageWithURL
方法。
但是为了让图片第一时间显示出来,你还需要有一个实例变量。
所以首先,您需要声明一个索引计数器实例变量:
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
}