封装一下图片下载功能

简介: 封装一下图片下载功能

封装一下图片下载功能


根据网络情况来加载图片

基本操作思路

  1. 如果是已经下载过原图,缓存下来了,直接从缓存中加载
    1.1.如果是没有加载过图片,则根据网络情况来加载图片。
    2.1如果是Wi-Fi则加载原图,
    3.1如果是3g/4g则去加载原图。
    3.2不是3g/4g 则去加载缩略图。
    2.2如果没有网,查看是否下载过缩略图,缓存下来了,那么显示缩略图,如果没有,则显示占位图。

第一步:添加一个分类

21af3466bd763796dfbc7c908ce6e4a2.png

Snip20170408_1.png

第二步:在.h 文件中声明一个方法出来,方便外面调用

a2323a578b96304116b73db8c445e1b2.png

Snip20170408_2.png

第三步:在.m文件中实现方法

adbbcecb64cacc578902eab3edf379ec.png

Snip20170408_3.png

b958dc5e2a1fb5cd8e8baa83330ce7ef.png

Snip20170408_4.png

代码呈上

注意⚠️ 依赖了SDWebImage  AFNetworking这个两个库

在 .h文件中的代码

#import <UIKit/UIKit.h>
#import <UIImageView+WebCache.h>
@interface UIImageView (LYWDownLoad)
- (void)LYW_setOriginImage:(NSString *)originImageURL thumbnailImage:(NSString *)thumbnailImageURL placeholder:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
@end

在 .m文件中的代码

#import "UIImageView+LYWDownLoad.h"
#import <AFNetworkReachabilityManager.h>
#import <UIImageView+WebCache.h>
@implementation UIImageView (LYWDownLoad)
- (void)LYW_setOriginImage:(NSString *)originImageURL thumbnailImage:(NSString *)thumbnailImageURL placeholder:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock
{
    // 根据网络状态来加载图片
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
    // 获得原图(SDWebImage的图片缓存是用图片的url字符串作为key)
    UIImage *originImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:originImageURL];
    if (originImage) { // 原图已经被下载过
        [self sd_setImageWithURL:[NSURL URLWithString:originImageURL] placeholderImage:placeholder completed:completedBlock];
    } else { // 原图并未下载过
        if (mgr.isReachableViaWiFi) {
            [self sd_setImageWithURL:[NSURL URLWithString:originImageURL] placeholderImage:placeholder completed:completedBlock];
        } else if (mgr.isReachableViaWWAN) {
            // 3G\4G网络下时候要下载原图
            BOOL downloadOriginImageWhen3GOr4G = YES;
            if (downloadOriginImageWhen3GOr4G) {
                [self sd_setImageWithURL:[NSURL URLWithString:originImageURL] placeholderImage:placeholder completed:completedBlock];
            } else {
                [self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholder completed:completedBlock];
            }
        } else { // 没有可用网络
            UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:thumbnailImageURL];
            if (thumbnailImage) { // 缩略图已经被下载过
                [self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholder completed:completedBlock];
            } else { // 没有下载过任何图片  // 占位图片;
                [self sd_setImageWithURL:nil placeholderImage:placeholder completed:completedBlock];
            }
        }
    }
}
@end

使用说明:主要根据网络情况来下载图片 下载大图和原图的以及没有网络的情况去加载缓存中的图

相关文章
|
6月前
|
人工智能 自然语言处理 Linux
自然语言到可运行代码:OpenClaw技术原理、部署及大模型api配置与工程化应用指南
人工智能在代码生成领域的落地,正在系统性改变软件开发的工作流程。OpenClaw作为一类能够理解自然语言需求并输出完整代码结构的AI辅助工具,已经从概念阶段进入实用阶段。它能够接收用户以日常语言描述的功能需求,自动生成函数、类、接口乃至完整模块,在规范写法、减少重复劳动、提升交付速度方面表现突出。但与此同时,这类工具也存在明确的能力边界与使用前提,需要开发者以理性、审慎的方式接入日常开发流程。本文从技术原理、实际体验、效率价值、职业影响、学习门槛与未来趋势出发,完整呈现OpenClaw的真实定位,并提供2026年阿里云、Windows 11、macOS、Linux四大环境的标准化部署流程,同时
1099 0
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
5261 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
存储 NoSQL Redis
redis zset底层数据结构
zset底层存储结构  zset底层的存储结构包括ziplist或skiplist,在同时满足以下两个条件的时候使用ziplist,其他时候使用skiplist,两个条件如下: 有序集合保存的元素数量小于128个 有序集合保存的所有元素的长度小于64字节  当ziplist作为zset的底层存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值。
16894 1
怎样在函数中返回多个值?
怎样在函数中返回多个值?
548 52
|
监控 编译器 C++
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
1105 0
|
存储 负载均衡 数据可视化
调度器域 【ChatGPT】
调度器域 【ChatGPT】
|
JSON Prometheus 监控
Prometheus+Grafana主机运行数据
Prometheus 是一款开源监控工具,Node Exporter 是其官方插件,用于收集服务器硬件和系统指标。要安装 Node Exporter,下载最新二进制文件,解压并移动到目标位置。启动二进制文件或设置为服务。在 Prometheus 配置文件 `prometheus.yml` 中添加 Node Exporter 目标配置
405 0
|
算法
力扣经典150题解析之三十四:有效的数独
力扣经典150题解析之三十四:有效的数独
336 0
|
存储 Java 编译器
jvm之.class文件解读(下)(二)
jvm之.class文件解读(下)(二)
|
XML 移动开发 JavaScript
记一次CORS踩坑记录
之前某一次远程工作的内容是配置并且实现CORS的跨域访问,本来特别简单的问题,却因为Spring的封装“坑”的有点惨,而且涉及一个IE浏览器跨域失败的问题处理比较麻烦,下面为整个cors跨域问的解决记录和笔记。
326 0

热门文章

最新文章