封装一下图片下载功能

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

封装一下图片下载功能


根据网络情况来加载图片

基本操作思路

  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

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

相关文章
|
4月前
|
运维 小程序 前端开发
小程序开发问题之在小程序中调用my.chooseImage接口让用户选择图片如何解决
小程序开发问题之在小程序中调用my.chooseImage接口让用户选择图片如何解决
|
4月前
|
编解码 API 开发工具
Android平台轻量级RTSP服务模块二次封装版调用说明
本文介绍了Android平台上轻量级RTSP服务模块的二次封装实践,旨在简化开发流程,让开发者能更专注于业务逻辑。通过`LibPublisherWrapper`类提供的API,可在应用中轻松初始化RTSP服务、配置视频参数(如分辨率、编码类型)、启动与停止RTSP服务及流发布,并获取RTSP会话数量。此外,还展示了如何处理音频和视频数据的采集与推送。最后,文章提供了从启动服务到销毁资源的完整示例,帮助开发者快速集成实时流媒体功能。
|
6月前
|
Java 机器人 API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
51 9
|
XML Android开发 数据格式
WebView二次封装,使用简单
WebView二次封装,使用简单
403 0
|
移动开发 前端开发 HTML5
前端下载图片的N种方法
前端下载图片的N种方法
439 0
前端下载图片的N种方法
|
小程序 JavaScript 前端开发
小程序封装加载动画
在小程序的开发中,页面的加载过程可能会因为网络状况的不好或数据量的过大而显得非常缓慢,这时候加上一个加载动画就能有效的缓解用户的等待焦虑感。而对于应用的多个页面来说,使用全局加载动画可以提高用户体验,让应用显得更加美观和专业。本篇技术分享博客将为大家介绍在小程序中封装全局加载动画的具体实现步骤,帮助您提高小程序的用户体验。通过上述步骤,我们就完成了小程序中封装全局加载动画的具体实现方法。在实际开发中,我们可以根据实际需求对组件样式和方法进行调整和修改,以满足不同的开发需求。
271 0
|
存储 小程序
小程序图片上传,存储,获取,显示(含源码)
小程序图片上传,存储,获取,显示(含源码)
366 0
|
前端开发 数据库
eggjs 怎么实现返回 base64 图片的接口给前端回显头像?
eggjs 怎么实现返回 base64 图片的接口给前端回显头像?
285 0
eggjs 怎么实现返回 base64 图片的接口给前端回显头像?
|
JavaScript API 开发者
详细自定义封装Axios请求库,你还不会二次封装吗?(二)
使用Vue的时候,Axios几乎已经是必用的请求库了,但是为了更方便搭配项目使用,很多开发者会选择二次封装,Vue3就很多人选择二次封装elementPlus,那其实,Axios我们也是经常会去封装的。
279 0
|
JSON 前端开发 JavaScript
详细自定义封装Axios请求库,你还不会二次封装吗?(一)
使用Vue的时候,Axios几乎已经是必用的请求库了,但是为了更方便搭配项目使用,很多开发者会选择二次封装,Vue3就很多人选择二次封装elementPlus,那其实,Axios我们也是经常会去封装的。
779 0