如何在滚动时停止在集合视图中重新加载服务器图像?

时间:2016-03-11 07:15:10

标签: ios swift uicollectionviewcell

我正在使用带图像的集合视图。可以说,它有30张图片。 每当我滚动视图时,图像都会重新加载。这是因为,每当我滚动时,都会调用此函数。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 现在我的问题是:我从Facebook获取少量图像,从阵列中获取少量图像。因此,每当我滚动时,来自fb的图像都会重新加载。如何停止重新加载这些图像。

这是我显示图片的代码(来自fb和本地):

let task = NSURLSession.sharedSession().dataTaskWithURL(searchURL) { (responseData, responseUrl, error) -> Void in
        if let data = responseData{
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                cell.image!.image = UIImage(data: data)
                if(cell.image!.image == nil){
                    let strid : String = friendInfo.Friendfb_id;
                    let facebookProfileUrl = NSURL(string: "https://graph.facebook.com/\(strid)/picture?type=large")
                    cell.image!.url = facebookProfileUrl;
                }else{
                    cell.image!.url = searchURL;
                }
            })
        }
    }
    task.resume()

我还在单元格中设置了prepareForReuse

override func prepareForReuse() {
    self.imageView.image = nil
}

1 个答案:

答案 0 :(得分:0)

您必须实现某种缓存来缓存图像,因此当第二次显示相同的单元格时,应该从缓存而不是从服务器加载图像。实现这样的缓存有多种解决方案,我个人最喜欢使用AlamofireImage来加载图像。它为您完成加载和缓存。