【发布时间】:2014-11-15 00:02:23
【问题描述】:
我正在使用 UICollectionView 来显示图像。
这是我的代码:
- (WaterFallCollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
WaterFallCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionViewCellIdentifier forIndexPath:indexPath];
NSURL *itemTBURL = [NSURL URLWithString:self.items[indexPath.item][@"image"][@"thumbnailLink"]];
[cell setNeedsLayout];
cell.imageView.imageURL = itemTBURL;
return cell;
}
我的问题是,比如collectionView总共有10张图片,首先我向下滚动到最后一张,collectionView中的第一张图片是不可见的,当我向上滚动到第一张时,它有刷新的效果程序将跳转到我展示的方法。看起来当单元格从不可见状态变为可见状态时,iOS 将强制调用该方法。我想存储之前显示的单元格,所以当你向上滚动时,它不会有刷新效果。我应该怎么办?我知道 Twitter、Pinterest、Facebook 当你向上滚动时,它们看起来不会刷新以前的单元格。我知道这是可行的,只是不知道该怎么做。提前致谢。
【问题讨论】:
-
您需要缓存您正在下载的图像并将它们存储在本地,而不仅仅是在内存中。您看到的“刷新”效果是因为单元格作为重用机制的一部分出列以确保平滑滚动。
-
嗨,杰夫,感谢 cmets。你能更具体一点吗?我是否需要将单元格对象与图像一起存储在本地?并且在滚动时,检查本地是否有该 indexPath 的单元格对象?如果是这样,使用它,如果不是出列另一个?
-
您不需要存储单元对象,您只需要缓存图像(例如存储到沙箱中的设备)。然后下次你来检查图像是否在你的缓存中,如果是,使用它,如果不是,下载它。您可能会发现 github.com/rs/SDWebImage 很有用。
-
同意杰夫。您可以使用 SDWebImage 和 UIImageView 类别来异步加载图像。如果图片已经下载,它会跳过网络操作,直接通过缓存加载。
标签: ios objective-c uicollectionview