2017-05-10 4 views
0

서버에서 이미지를 다운로드하고 컬렉션보기 (그리드 3 * n)를 채울 때. 나는 결함이있다.iOS - 스크롤 할 때 Collectionview 이미지가 사라지고 가끔씩 겹칩니다.

셀을 다시 사용하기 전에 이미지보기를 nil로 만들고 GCD를 사용하여 주 스레드에서 이미지보기를 업데이트하는 등 가능한 모든 작업을 시도했습니다.

하지만 여전히 결함에 직면하고 있습니다.

글리치는 컬렉션보기를 스크롤 할 때 다운로드 한 이미지가 겹쳐져 있고 컬렉션보기 셀에서 사라지는 경우가 있습니다.

이미지가 사라지는 원인 (한 번 다운로드 한 이미지)을 알 수 없습니다.

제안 사항.

private func cellForDropbox(cell:GridCell,indexPath:IndexPath) -> GridCell { 

    let filename = self.filenames[(indexPath as NSIndexPath).row] 

    cell.imageView.backgroundColor = UIColor.lightGray 
    cell.imageView.image = nil 

    DropboxClientsManager.authorizedClient?.files.getTemporaryLink(path: filename).response(completionHandler: { (response, error) in 

      if let url = response { 
       cell.imageView.sd_setImage(with: URL(string:url.link), placeholderImage: nil, options: .refreshCached, completed: { (img, error, cacheType, url) in 
       }) 

      } else { 
       print("Error downloading file from Dropbox: \(error!)") 
      } 
     }) 

    return cell 
} 
+0

왜 이미지를 캐시에 저장 했습니까? 이미 SDwebImage를 사용하고 있다면. – KKRocks

+0

@KKRocks : 죄송합니다. 지금은 제거하고 있습니다. – user3804063

답변

0

이미지 다운로드의 완료 콜백을 원하지 않는 경우이 방법을 사용해보십시오.

private func cellForDropbox(cell:GridCell,indexPath:IndexPath) -> GridCell { 

    let filename = self.filenames[(indexPath as NSIndexPath).row] 

    cell.imageView.backgroundColor = UIColor.lightGray 

    DropboxClientsManager.authorizedClient?.files.getTemporaryLink(path: filename).response(completionHandler: { (response, error) in 

      if let url = response { 
      cell.imageView.sd_setImage(with: URL(string: url.link), placeholderImage: UIImage(named: "placeholder.png")) 


      } else { 
       print("Error downloading file from Dropbox: \(error!)") 
      } 
     }) 

    return cell 
} 
+0

는 인치에 도움이되지 않습니다. ( – user3804063

+0

) cellForRowAtIndexPath 외부의 이미지를 다운로드 할 수 있습니까? – KKRocks

+0

이상 : 그리드보기가 필요하며 스크롤 할 때 이미지가 사라지고 다른 이미지가 나타납니다. 음식물. – user3804063