我刚刚开始使用KingFisher。
当您向下快速滚动UITableView时,所有网络/下载请求都将备份,因此当它停止滚动时,它仍会完成先前的请求。
这会导致所有图像闪烁着不同的图片,直到完成所有备份请求。
这是我的代码,用于从缓存或网络中检索图像。
if ImageCache.defaultCache.cachedImageExistsforURL(finished_URL!) == true {
print("image is already cached.")
if cell.tag == indexPath.row{
cell.card_imageIV.image = UIImage(imageLiteral: "ic_error")
KingfisherManager.sharedManager.retrieveImageWithURL(finished_URL!, optionsInfo: nil, progressBlock: nil, completionHandler: { (image, error, cacheType, imageURL) -> () in
cell.card_imageIV.image = image
print("Retrieved cached image")
})
}
}else{
cell.card_imageIV.kf_setImageWithURL(finished_URL!, placeholderImage: self.placeholderImage, optionsInfo: nil, completionHandler: { image, error, cacheType, imageURL in
print("\(card_name): Finished")
})
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用https://github.com/onevcat/Kingfisher上的以下文档来取消以前的所有下载任务,但使用了却没有帮助。
我尝试以下代码:
// The image retrieving will stop.
imageView.kf_cancelDownloadTask()
Run Code Online (Sandbox Code Playgroud)
这只会取消当前的单元格,至少在我看来。
所以这真令人沮丧。我正在尝试使用单例传递字符串变量,但它没有在第二个UIViewController上传递。
Singleton.swift:
class CardName {
var cardName : String = ""
class var sharedInstance : CardName {
struct Static {
static let instance : CardName = CardName()
}
return Static.instance
}
var returnedCardName : String {
get{
return self.cardName
}
set {
self.cardName = newValue
}
}}
Run Code Online (Sandbox Code Playgroud)
查看1:
CardName.sharedInstance.returnedCardName = "Single pass test"
print("Shared instance name set: \(CardName.sharedInstance.returnedCardName)")
Run Code Online (Sandbox Code Playgroud)
print()成功显示了正确设置的字符串。
查看2:
let card_name_shared = CardName.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
card_Name = card_name_shared.returnedCardName
print("Passed Card Name: \(self.card_name_shared.returnedCardName)")
}
Run Code Online (Sandbox Code Playgroud)
查看2个print()结果: …