【问题标题】:SDWebImage not working in Google Maps InfoWindowSDWebImage 在 Google 地图信息窗口中不起作用
【发布时间】:2015-02-07 17:16:15
【问题描述】:

我正在尝试通过 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

}

感谢您的帮助

【问题讨论】:

  • 第一次加载时是否显示占位符图像?您也可以尝试添加一个带有 print/long 语句的完成块,这样您就可以检查图像是否在第一次单击时成功加载。你也可以试试 AFNetworking 的 setImageView 方法。
  • @ztan 是的,它首先显示占位符图像。我尝试添加一个完成块,但该块在第二次单击时调用为加载的图像。
  • @ztan 使用 AFNetworking 给我同样的结果
  • @ztan 当我使用 AFNetworking 时,第一次单击时会调用完成块,但它甚至无法隐藏 ImageView (imageView.hidden = true)。我认为,只有当它已经加载时才能设置该图像。所以在第二次点击它显示只是因为它被缓存了。
  • 我试过SDWebImage,不幸的是它只在第二次点击时显示图像。那么您使用哪种 AFNetworking 方法?

标签: ios google-maps google-maps-sdk-ios


【解决方案1】:

在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
} 

【讨论】:

    【解决方案2】:

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

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

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

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

    int counter = 0; 可能是 Swift 中的 var counter = 0;

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

    - (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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2014-04-06
      • 2018-12-02
      • 1970-01-01
      • 2017-09-29
      • 2013-05-15
      相关资源
      最近更新 更多