iOS Collection View Scrolling Lags

时间:2013-07-04 01:52:22

标签: ios uicollectionview

我正在使用UI集合视图以垂直滚动格式显示包含图像及其相关数据(如日期,名称)的单元格。当视图出现时,将从服务器获取图像数据。然后,当单元格出现时,获取的数据将转换为UIImage。

问题是滚动是滞后的。每当新单元格即将出现时,滚动会稍微挂起。有没有办法解决这个问题?我想在后台线程中开始将NSData转换为UIImage以防止延迟。不确定这是不是正确的方法。

1 个答案:

答案 0 :(得分:1)

正如堆栈所说,你应该异步加载图像,并且有很好的UIImageView类别使这很容易做到,即SDWebImageAFNetworking中的类别。这些UIImageView类别不仅异步加载图像,而且还进行缓存,必要时取消网络操作等。如果您自己正确地执行此操作(捕获我刚刚枚举的所有这些功能),需要大量代码,但是如果你使用其中一个类别,这真的很容易。

例如,如果使用SDWebImage,您可以:

#import "UIImageView+WebCache.h"

然后:

[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
    if (error)
        NSLog(@"%s: setImageWithURL error: %@", __FUNCTION__, error);
}];

或者,如果使用AFNetworking:

#import "UIImageView+AFNetworking.h"

[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:url] placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    NSLog(@"%s: setImageWithURLRequest error: %@", __FUNCTION__, error);
}];