在uitableview中加载异步图像

时间:2012-06-29 19:25:38

标签: ios facebook uitableview uiimageview

我目前正在将Facebook集成到我的应用程序中,目前我正在加载登录用户朋友的个人资料图片。我在UITableView中呈现这些用户,在每个单元格中显示图片和朋友的名字。我已经将UIImageView子类化了,当在cellForView方法中处理相应的单元格时,图像是异步加载的。

但是,当我多次上下滚动时,图像会闪烁,首先加载一些错误的图像,显​​示的时间很短,然后加载正确的图像。因此,我认为当单元格位于视图之外时,我必须寻找一种方法来停止加载图像。

有没有人可以帮我解决这个问题,并给我一个解决方案?

提前致谢!

3 个答案:

答案 0 :(得分:4)

您可以解除任何已加载的图像(以及正在进行的加载操作,如果有的话)  - (void)prepareForReuse method of UITableViewCell

我强烈建议重复使用单元格,没有它你就没有机会顺利滚动。

答案 1 :(得分:0)

您可以考虑不重复使用细胞。但是,如果您需要加载大量表格单元格(例如,很多朋友),这可能会影响性能。由于每个单元都有自己的图像,因此不会因为单元重用而发生闪烁。

要看的另一件事是图像的文件大小。有可能它们比你实际展示它们的大小要大。如果有办法获得更小的版本,那肯定会有所帮助。

第三,您可以将图像视图设置为tableView:willDisplayCell:forRowAtIndexPath中的默认图像。闪烁可能仍会发生,但使用默认图像,看起来比其他人的图片更好。事实上,我认为这就是Facebook应用的功能。

答案 2 :(得分:0)

当单元格隐藏时,它将从tableView中删除。因此,您可以覆盖UITableViewCell派生类方法willMoveToSuperview:

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [super willMoveToSuperview:newSuperview];
    if(newSuperview == nil) {
        // Stop image downloading
    }
}