在swift 2中滚动时重用图像的集合视图

时间:2015-10-17 06:07:18

标签: ios xcode swift uicollectionview uicollectionviewcell

我只是绝望,现在搜索了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)
        }
    })
}

}

2 个答案:

答案 0 :(得分:0)

由于细胞重复使用,您的细胞已将先前的图像加载到其中,因此您在那里是正确的。

您需要做的就是在您的cellForItemAtIndexPath中将单元格图像设置为nil,然后再从服务器获取更新的单元格。

答案 1 :(得分:0)

您可以更新prepareForReuse方法

override func prepareForReuse() {

    myImageView.image = nil

    super.prepareForReuse()
}