4

Haneke ライブラリを使用して、画像のダウンロード、読み込み、キャッシュを行っています。これはうまく機能しますが、スクロールが速すぎる場合、正しくない画像が読み込まれたり、画像がまったく読み込まれない場合があります。

バックグラウンドでダウンロードできるよりも速くスクロールしているため、キュー内の次の画像が間違ったセルに読み込まれる可能性があります。

これは、ネットワーク経由でキャッシュから画像をリクエストするためのコードです。

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

また、カスタム セルの Swift ファイルでは、セルが画面から外れているときに要求を停止する次のメソッドに入れることができるものはありますか?

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

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

私は何週間もこれを理解しようとしてきました。この問題を解決するために使用するより良いライブラリを誰かが持っている場合は、お知らせください。

4

1 に答える 1

1

私がしているのは、私の画像をそのように画像キャッシュに保存することです。

      private var imageCache = [String:UIImage]()

どこからでも画像を取得したら、UIImage を imageCache 配列に保存します。

     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のないコンピューターでこれを書きました. ハッピーコーディング。

于 2016-06-04T16:57:08.260 に答える