我使用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
}
我一直在努力解决这个问题。如果有人有更好的库来解决这个问题,请告诉我。
答案 0 :(得分:1)
我所做的是将图像存储在图像缓存中。
private var imageCache = [String:UIImage]()
一旦我从任何地方获取了我的图像,我将UIImage存储在我的imageCache数组中。
self.imageCache["myImageFilename-01"] = img
self.imageCache["myImageFilename-02"] = img2
etc....
然后我将文件名存储在我的单元格数据对象中。
//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的计算机上写了这个问题。快乐的编码。