iOS 集合视图滚动滞后

Posted

技术标签:

【中文标题】iOS 集合视图滚动滞后【英文标题】:iOS Collection View Scrolling Lags 【发布时间】:2013-07-04 01:52:22 【问题描述】:

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

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

【问题讨论】:

将 SDWebImage 与占位符一起使用 【参考方案1】:

正如堆栈所说,您应该异步加载图像,并且有很棒的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 集合视图滚动滞后的主要内容,如果未能解决你的问题,请参考以下文章

设置行数后集合视图水平滚动? ios 斯威夫特

iOS 15 Simulator - 滚动时呈现损坏的集合视图单元格......?

在 ios 8 中将集合或表格视图或自定义视图添加到滚动视图

如果集合视图嵌入到 ios 的表视图中,如何始终显示集合视图的第一项

iOS 中的动态布局

如何在 iOS 中避免/禁用 Collection View 的垂直滚动