2017-12-08 7 views
0

좌표 세트를 기반으로 이미지를 다운로드하기 위해 API에 문의하는 CollectionViewController가 있습니다. cellForItemAt 함수에서이 코드를 호출하면 Flickr의 이미지로 실시간으로 셀의 이미지를 업데이트합니다. 이것은 잘 작동합니다.cellForItemAt에서 UICollectionViewCells의 재로드를 방지하려면 어떻게합니까?

그러나 위로 스크롤하거나 아래로 스크롤하면이 코드가 다시 호출되어 기존 셀을보고 채워 졌는지 확인한 다음이 코드를 실행하지 않는 것이 좋습니다.

imageView.images가 이미 로컬 구조체에 존재하지만 올바르게 작동하지 않는 것을 확인하는 네트워킹 코드 전에 논리를 구현해 보았습니다.

cellForItemAt에 "이미 이미지가있는 셀을 찾고 더는 찾지 마십시오"라고 말하는 간단한 방법이 있습니까? URL에서 이미지로드에 대한

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath as IndexPath) as! CollectionViewCell 

     // Get images = using the URL 
     FlickrClient.sharedInstance().getImagesFromFlickr(latitude: selectedPin.lat, longitude: selectedPin.lon, page: pageCount) { (pin, error) in 

      if let pin = pin { 
       let url = pin.images[indexPath.item].imageURL 
       let data = try? Data(contentsOf: url) 
       performUIUpdatesOnMain { 
        cell.imageView.image = UIImage(data: data!) 
        cell.imageView.contentMode = .scaleAspectFill 
       } 
      } 
     } 
    return cell 
} 
+1

세포 아직 가지고 있지 않습니다. NSCache 또는 SDWebImage를 사용하여 이미지를 캐싱 할 수 있습니다. 또한, 왜 한번에 URL을 가져 오는 대신 Flickr에서 이미지 URL을 얻는가? – Paulw11

+0

이것은 수업을위한 것으로, 루 브릭의 일부는 이미지를 다운로드 할 때 표시된다는 것입니다. 다른 제안을 주셔서 감사합니다. – Pigpocket

+0

여전히 셀이 대기열에서 제외 될 때마다 flickr에서 데이터를 가져올 이유가 없습니다. 선택한 핀이 변경 될 때만 이미지 목록이 변경됩니다. 핀 선택에 한 번만 getImagesFromFlickr를 호출하면된다. SDWebImage와 같은 타사 프레임 워크를 사용하고 싶지 않다면'NSCache'를 사용하십시오. – Paulw11

답변

0

사용 SDwebImage의 libray :

여기에 내 현재 코드입니다. 행의 셀이 같은

https://github.com/rs/SDWebImage

전화 뭔가 :

let url = pin.images[indexPath.item].imageURL 
cell.imageView.sd_setImage(with: url, placeholderImage: UIImage(named: "placeholder.png")) 
collectionview이 있기 때문에 셀을 필요로 할 때 cellForItemAt` 만이라고`그들이 그렇게보기에서 스크롤하면 개체를 재사용