iOS Collection View 滚动滞后

标签 ios uicollectionview

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

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

最佳答案

正如 stack 所说,您应该异步加载图像,并且有很棒的 UIImageView 类别使这很容易做到,即 SDWebImage 中的类别或在 AFNetworking .这些 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);
}];

关于iOS Collection View 滚动滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17460731/

相关文章:

ios - RxSwift 和 UICollectionView header

swift - 从多个 UICollectionVIews 内部的 UICollectionViewCell 推送一个新的 UICollectionViewController

ios - 如何在 UICollectionView Swift 4.0 中正确调整大小和居中扩展单元格

ios - XMPP 无法获取名册 iOS

ios - 数据库中最后插入的行 id 已成功插入但获取该 id 为 0?

iphone - 无法以编程方式设置 UIButton 操作

ios - 从 Xcode 4.2.1 到 4.3 的正确方法?

ios - UICollectionView.scrollToItemAtIndexPath 如何工作?

ios - 使用 UICollectionViewCell 中的按钮,如何获取特定单元格的内容详细信息?

ipad - 为什么我无法在应用程序崩溃的情况下释放我的 CTFramesetter?