我只是绝望,现在搜索了6个小时,似乎无法找到答案。
我有一个收集视图,其中包含从远程服务器加载的图像,在滚动细胞时,使用之前的图像刷新细胞几秒钟,然后再进行清理。 尝试重写“准备重用”并将imageview图像设置为nil但它仍然无法正常工作.. 非常感谢能够让它工作的人的一个例子,
非常感谢!
编辑 - 添加代码
的CollectionView:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath:indexPath) as! PictureCell
cell.pictureCD = GalleryCD().fetchTable()[indexPath.row]
return cell
}
CollectionViewCell:
class PictureCell: UICollectionViewCell {
@IBOutlet weak var picture: UIImageView!
var pictureCD: NSManagedObject! {
didSet { self.setupData() }
}
override func prepareForReuse() {
super.prepareForReuse()
self.picture.image = nil
self.picture.setNeedsDisplay() // tried adding after some recommendations
self.setNeedsDisplay() // tried adding after some recommendations
}
func setupData(){
self.picture.image = UIImage(named: "blank")
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let URL = (NSURL (string: url.pictureSquareGET(picture: self.pictureCD)))!
let data = NSData(contentsOfURL: URL)!
dispatch_async(dispatch_get_main_queue()) {
self.picture.image = UIImage(data: data)
}
})
}
}
答案 0 :(得分:0)
由于细胞重复使用,您的细胞已将先前的图像加载到其中,因此您在那里是正确的。
您需要做的就是在您的cellForItemAtIndexPath中将单元格图像设置为nil,然后再从服务器获取更新的单元格。
答案 1 :(得分:0)
您可以更新prepareForReuse方法
override func prepareForReuse() {
myImageView.image = nil
super.prepareForReuse()
}