2

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

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

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

提前致谢!

4

3 回答 3

4

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

我强烈建议重用单元格,没有它你就没有机会获得平滑的滚动。

于 2012-06-29T23:23:11.867 回答
0

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

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

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

于 2012-06-29T19:53:02.497 回答
0

当单元格被隐藏时,它会从tableView. 所以你可以在你的UITableViewCell派生类方法中重写willMoveToSuperview:

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [super willMoveToSuperview:newSuperview];
    if(newSuperview == nil) {
        // Stop image downloading
    }
}
于 2012-06-29T20:07:13.893 回答