在巨人的肩膀上(利用SDWebImage库再封装)

2024-06-18 21:48

本文主要是介绍在巨人的肩膀上(利用SDWebImage库再封装),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其实SDWebImage已经封装的非常之好了,但是如果你的客户端有特殊需求的话就需要根据自己的需求做一个定制化的方案。今天我就是有个特殊需求,根据当前网络和用户设置需求去网络下载大图还是小图。

接下来开始正题,首先既然我们是根据当前网络去下载的图片,那么我们就需要检测当前网络的状态,这个可以自己写代码,当然也可以继续在“巨人的肩膀”上去寻找现成的类库。

我们的项目中一般都会导入网络请求的库AFNetWork,而这个库中就有一个AFNetworkReachabilityStatus来表示网络状态的库,我们就用这个去获取到当前网络的状态区分下载大图还是小图。

获取网络状态的代码如下:

AFNetworkReachabilityStatus status = [AFNetworkReachabilityManager sharedManager].networkReachabilityStatus;

就是这么简单。
然后我们可以根据这个status去写使用哪种图片。详细逻辑如下:

if (status == AFNetworkReachabilityStatusReachableViaWiFi) {NSLog(@"当前是wifi,赶紧去下载大图片啊!");[currentImage sd_setImageWithURL:[NSURL URLWithString:bigImageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {NSLog(@"给当前图片下载并展示出来。");}];}else if (status == AFNetworkReachabilityStatusReachableViaWWAN){NSLog(@"这是3G/4G网,看情况下载大图还是小图");BOOL alwaysLoadBigImage = YES;//这个可以用 [[NSUserDefaults standardUserDefaults]boolForKey:@"用户选择的下载风格"];if (alwaysLoadBigImage) {NSLog(@"用户设置的总是下载大图");[currentImage sd_setImageWithURL:[NSURL URLWithString:bigImageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {NSLog(@"给当前图片下载并展示出来。");}];}else if (alwaysLoadBigImage) {NSLog(@"用户设置的下载小图");[currentImage sd_setImageWithURL:[NSURL URLWithString:smallImageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {NSLog(@"给当前图片下载并展示出来。");}];}else{NSLog(@"当前没网,只能显示holderimage了。");[currentImage setImage:[UIImage imageNamed:holderImage]];}}

以上就是根据网络状态和用户设置去判断下载大图还是小图。

当然你也可以自己在外面重新包装一层,就是看cache或者disk里面有没有需要的图片,但是这样的代码没什么用处,因为- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock已经有了这样的判断,这就是SDWebImage的内部实现机制。所以我自己也就不需要再去写一层封装了。

最后写一下自己的封装方法:

-(void)QFSDWebImageOriginImage:(NSString*)bigImageUrl thumbImage:(NSString*)smallImageUrl PlaceholderImage:(NSString*)holderImage withBlock:(SDWebImageCompletionBlock)completedBlock

以上方法就是我自定义的方法里面的实现代码。

这篇关于在巨人的肩膀上(利用SDWebImage库再封装)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073146

相关文章

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

axios全局封装AbortController取消重复请求

为什么? 问题:为什么axios要配置AbortController?防抖节流不行吗? 分析: 防抖节流本质上是用延时器来操作请求的。防抖是判断延时器是否存在,如果存在,清除延时器,重新开启一个延时器,只执行最后一次请求。节流呢,是判断延时器是否存在,如果存在,直接return掉,直到执行完这个延时器。事实上,这些体验感都不算友好,因为对于用户来说,得等一些时间,尤其是首次请求,不是那么流畅

Python利用qq邮箱发送通知邮件(已封装成model)

因为经常喜欢写一些脚本、爬虫之类的东西,有需要通知的时候,总是苦于没有太好的通知方式,虽然邮件相对于微信、短信来说,接收性差了一些,但毕竟免费,而且支持html直接渲染,所以,折腾了一个可以直接使用的sendemail模块。这里主要应用的是QQ发邮件,微信关注QQ邮箱后,也可以实时的接收到消息,肾好! 好了,废话不多说,直接上代码。 # encoding: utf-8import lo

线程封装,互斥

文章目录 线程封装线程互斥加锁、解锁认识接口解决问题理解锁 线程封装 C/C++代码混编引起的问题 此处pthread_create函数要求传入参数为void * func(void * )类型,按理来说ThreadRoutine满足,但是 这是在内类完成封装,所以ThreadRoutine函数实际是两个参数,第一个参数Thread* this不显示 解决方法: 第

示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器

一、目的:基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器,感兴趣的可以去下方链接地址查看开源控件库地址。本控件封装的目的在于将第三方库的皮肤和样式封装到皮肤库中可统一设置样式,同时生成nuget方便调用 二、效果如下 三、环境 VS2022 Net7 四、使用方式 1、安装nuget包:H.Con

C语言封装获取本机IP地址的程序

文章目录 0.概要1. 设计2. 完整的代码`ip_address.h``ip_address.c``main.c`编译命令执行结果 0.概要 本文介绍用C语言编写一个函数来获取本机的IP地址。 1. 设计 将获取IP地址的逻辑封装到一个独立的函数中,并定义一个结构体来存储IP地址和接口名称。 将获取IP地址的逻辑封装到一个函数中,该函数遍历本机的所有网络接口并获取其IP

H264 视频文件 帧格式 传输封装等 杂碎

rfc3984  Standards Track [Page 2] RFC 3984 RTP Payload Format for H.264 Video February 2005 1.  按照RFC3984协议实现H264视频流媒体 nalu单元 包起始 0x 00 00 00 01 H.264 NAL格式及分析器 http://hi.baidu.com/zsw%5Fdavy/b ...

C# 唯一性进程的方法封装(Winform/WPF通用)

C#唯一进程封装 C# 唯一性进程的方法封装 public class UniqueProcess{/// <summary>/// 焦点切换指定的窗口,并将其带到前台/// </summary>/// <param name="hWnd"></param>/// <param name="fAltTab"></param>[DllImport("user32.dll")]public st

如何使用小猪APP分发进行在线封装

什么是在线封装? 在线封装,顾名思义,就是通过网络将应用程序进行打包处理。这个过程不仅能节省时间,还能大大提升工作效率,让开发者专注于应用本身的优化。 小猪app封装www.ppzhu.net 为什么选择小猪APP分发? 在众多在线封装平台中,小猪APP分发脱颖而出。你可能会问,为什么选择它?答案简单明了:它不仅操作简单,而且功能强大,支持多种应用类型的在线封装。最重要的是,它能帮你省