当前位置: 首页 > article >正文

iOS开发 SDWebImage加载webp动图以及加载大量动图

 先在项目中集成

pod 'SDWebImage

pod 'SDWebImageWebPCoder'

 SDWebImageWebPCoder是针对webp的解码器。在大多数情况下加载网络图片都是使用SDWebImage来实现。但是对于webp图的话就要加多一个解码器SDWebImageWebPCoder。

示例大部分加载网络图片的实现
 

//大小自己设置
UIImageView *imageView = [[UIImageView alloc] init];
imageView = UIViewContentModeScaleAspectFill;
[self addSubview: imageView];

//加载图片,耗时大概几毫秒的样子
imageView sd_setImageWithURL:<普通图片链接> placeholderImage:nil options:SDWebImageHighPriority completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
}];


//加载webp链接,耗时一秒左右
imageView sd_setImageWithURL:< webp链接> placeholderImage:nil options:SDWebImageHighPriority completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
}];

你可以先对比一下加载这两个图片的耗时的区别。UIImageView加载普通图片是挺快的,但是加载webp图就会很慢,慢的离谱,200kb左右的webp动图,加载耗时在1秒左右,是不是很慢。

我的项目需要CollectView加载大量的动图,使用上述的方式就会给人一种非常非常卡顿的感觉,体验非常不好。这篇文章也是想记录一下这个。

 

CollectView或tableview加载大量动图卡顿加载慢的问题

在cell即将显示的再加载资源,在cell从页面中移除的时候取消加载图片的任务,在cell复用的时候将Image置为nil。
 

//cell即将显示,加载图片
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{

  [cell.imageView sd_setImageWithURL:ossImageUrl placeholderImage:nil options:SDWebImageHighPriority completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
    }];

}

// Cell 完全离开屏幕时触发。当一个 Cell 被从屏幕上移除
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(HSImageCollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{
    //取消加载图片的任务
    [cell.imageView sd_cancelCurrentImageLoad];
}


//在你自定义cell的内部加上
- (void)prepareForReuse{
    [super prepareForReuse];
    
    [self.imageView sd_cancelCurrentImageLoad];
    self.imageView.image = nil; // 释放图片
}

这样处理之后加载图片是没问题的,但是加载webp还是卡顿。 

看了一下发现SDWebImage是有一个SDAnimatedImageView完全继承UIImageView的组件。使用SDAnimatedImageView来加载webp动图就流程很多啦。


http://www.kler.cn/a/521117.html

相关文章:

  • 【Docker】Docker入门了解
  • Leetcode45:跳跃游戏 II
  • DDD 和 TDD
  • 数据库表数据导出攻略:SQL脚本生成全解析
  • /opt安装软件,就可以使用man xx命令是为什么
  • kubernets安装
  • USB 3.1 Legacy Cable and Connector笔记
  • World of Warcraft [CLASSIC] Jewelcrafting Gemstone 2
  • Java中的依赖注入(可以不使用@Autowired注解)
  • 蓝桥杯之c++入门(一)【数据类型】
  • 信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图
  • 哈希表的使用
  • 使用PyTorch实现逻辑回归:从训练到模型保存与加载
  • MySQL 8 不开通 CLONE 插件,建立主从关系
  • mybatis(78/134)
  • 使用QSqlQueryModel创建交替背景色的表格模型
  • 技术速递|.NET 9 中的 OpenAPI 文档生成
  • 【大数据】数据治理浅析
  • 想品客老师的第七天:闭包和作用域
  • 代码随想录算法训练营day30(补0123)
  • 基于 Ansible 的 Linux 服务器自动化运维实战
  • Java Web-Cookie与Session
  • 前端性能优化指标 - DCL(触发时机、脚本对 DCL 的影响、CSS 对 DCL 的影响)
  • RAG:实现基于本地知识库结合大模型生成(LangChain4j快速入门#1)
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
  • ollama使用详解