2016-05-14 9 views
2

Hanekeライブラリを使用してダウンロードするには、&キャッシュイメージをロードしてください。これは、スクロールが速すぎる場合、間違った画像を読み込んだり、画像がまったく表示されない場合を除いて、効果的です。Swift - UITableView - 高速スクロール時に不適切な画像が読み込まれる

バックグラウンドでダウンロードできる速度よりも速くスクロールしているため、キュー内の次の画像は間違ったセルにロードされます。

ここには、ネットワークから画像を要求するためのコード&があります。

let fetcher_net = NetworkFetcher<UIImage>(URL: finished_URL!) 
     let fetcher_disk = DiskFetcher<UIImage>(path: check_apost) 
     cache.fetch(fetcher: fetcher_disk).onSuccess { image in 
      //cell.card_imageIV.hnk_fetcher.cancelFetch() 
      //print("Image Cache found") 
      cell.card_imageIV.image = image 
      }.onFailure{ image in 
       //print("Unavailable to find image cache, fetching from network") 
       cache.fetch(fetcher: fetcher_net).onSuccess { image in 
        //print("Network image request SUCCESS") 
        cell.card_imageIV.image = image 
       } 
     } 

また、カスタムセルスウィフトファイルで、私は細胞が画面から外れているとき、すべての要求を停止します以下の方法で置くことができるものはありますか?

override func prepareForReuse() { 
    super.prepareForReuse() 
    // Increment the generation when the cell is recycled 

    //card_imageIV.hnk_cancelSetImage() 
    //card_imageIV.image = nil 
} 

私は数週間これを理解しようとしています。誰かがこの問題を解決するために使用するライブラリがあれば教えてください。

答えて

1

私がしているのは、イメージをイメージキャッシュに保存することです。

 private var imageCache = [String:UIImage]() 

私は自分のイメージをどこから取得したら、imageCache配列にUIImageを格納します。

 self.imageCache["myImageFilename-01"] = img 
    self.imageCache["myImageFilename-02"] = img2 
    etc.... 

次に、セルデータobjにファイル名を格納します。

//Basic structure example. 
class myData: NSObject 
    { 
    var imageFilename : String? 
    var titleText : Double? 
    etc... 
    } 

データをobjに格納し、objを配列に格納します。これは後でデータを取得するために使用されます。

let newObj = myData() 
    newObj.imageFilename = "myImageFilename-01" 
    newObj.titleText = "some title text" 
    myDataArray.append(newObj) 

このように画像を設定することができます。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("TableCell", forIndexPath: indexPath) as! MyCustomCellClass 

    //I like to clear the image. Just incase. Not sure it is needed to do. 
    cell.myCellImage.image = nil //Or what ever you have wired up. 

    //Get the data from your array of myDataArray 
    let rowData = myDataArray[indexPath.row] 

    cell.myCellImage.image = self.imageCache[rowData.imageFilename] 

    //Set the rest of your cell stuff 

    return cell. 
    } 

正しい方向に進むはずです。私はいくつかの構文の問題があるかもしれないと思う、私はXcodeなしのコンピュータでこれを書いた。ハッピーコーディング。

関連する問題