2013-06-27 35 views
22

我使用SDWebImage動態返回UIImageView in - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;如何強制markerInfoWindow刷新內容在谷歌地圖iOS版SDK

UIImageView加載圖像通過一個網址。

由於文件說,有關標記信息的窗口:

注:信息窗口每次被顯示在地圖上呈現的時間爲圖像。這意味着任何對其屬性進行更改時都不會立即顯示。信息窗口的內容在下次顯示時會刷新。

的一點是,下載圖像後,信息窗口不會刷新並保持顯示圖像佔位符,直到用戶隱藏然後再返回再次顯示它..

所以我需要強制刷新的內容markerInfoWindow在下載的圖像塊..

回答

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

這個答案是不再正確,請參見下面@Enrico Susatyo的答案(http://stackoverflow.com/a/37064936/1305067)。 – paulvs

0

@Shady Elyaski的回答非常好,這是對Parse的一個快速重新解釋,因爲任何人都需要一個。

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

你有。只需幾行簡單的代碼。這對我來說非常合適。在完成下載圖像後添加這些代碼行 我的意思是在您的completionBlock中。

 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」方法中使用它

16

在GoogleMaps iOS SDK 1.13.0或更高版本中,他們已經添加了這個功能。要啓用此功能,只需將GMSMarker上的tracksInfoWindowChanges屬性設置爲YES即可。

實施例:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { 
    marker.tracksInfoWindowChanges = YES; 

    MyInfoWindow *infoWindow = [[MyInfoWindow alloc] init]; 
    [infoWindow.imageView sd_setImageWithURL:imageUrl]; 
    return infoWindow; 
} 

來源:

+2

爲什麼需要3年時間才能從建議開始實施?多數民衆贊成在可怕 – cspam

+5

**這是正確的答案。** – paulvs

+0

謝謝你!節省了我的時間:) –

0

夫特基於恩里科Susatyo溶液:

通過GMSMarker對象的tracksInfoWindowChanges屬性設置爲true

marker.title = "my marker" 
marker.tracksInfoWindowChanges = true