ios - SDWebImage的基本使用
2020-10-12 本文已影响0人
Fat_Blog
基本使用
//
// ViewController.m
// SDWebImageLearn
//
// Created by MacBook pro on 2020/10/11.
// Copyright © 2020 MacBook pro. All rights reserved.
//
#import "ViewController.h"
#import <UIImageView+WebCache.h>
#import <SDWebImageManager.h>
#import <SDWebImageDownloader.h>
#import <UIImage+GIF.h>
@interface ViewController ()
@property (nonatomic, strong) UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.imageView = [[UIImageView alloc] init];
self.imageView.frame = CGRectMake(30, 100, 350, 250);
[self.view addSubview:self.imageView];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self gif];
}
//下载图片而且需要获取下载进度
//自动做好磁盘缓存和内存缓存
- (void)downLoad {
//这是直接下载图片到imageView上的,而且自动做好内存缓存和磁盘缓存
/**
placeholderImage:占位图
options:0 表示默认的缓存方案
receivedSize/expectedSize:表示下载进度
*/
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1602514957001&di=05cd7984f57a412b71ad741650dd49f7&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20171018%2F728aa945618b43bba5f0dd236c58b9e5.jpeg"] placeholderImage:[UIImage imageNamed:@"image"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
NSLog(@"%ld",receivedSize/expectedSize);
} completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
switch (cacheType) {
case SDImageCacheTypeNone:
NSLog(@"直接下载");
break;
case SDImageCacheTypeDisk:
NSLog(@"磁盘缓存");
break;
case SDImageCacheTypeMemory:
NSLog(@"内存下载");
break;
default:
break;
}
}];
}
//这是单纯地下载图片
//自动做好磁盘缓存和内存缓存
- (void)downLoad2 {
[[SDWebImageManager sharedManager] loadImageWithURL:[NSURL URLWithString:@"https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3706177086,1076559430&fm=26&gp=0.jpg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
NSLog(@"%f",1.0*receivedSize/expectedSize);
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
self.imageView.image = image;
}];
}
//下载图片
//不需要做磁盘缓存和内存缓存
- (void)downLoad3 {
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3706177086,1076559430&fm=26&gp=0.jpg"] completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
//data是图片的二进制数据
//这个completed块是在子线程进行的,因此如果要给imageView的image赋值时要在主线程中进行
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.imageView.image = image;
}];
}];
}
//播放gif图片
- (void)gif {
NSURL *url = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1602517856184&di=14d2df7654ed95ae8f67af443baf4cf4&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201611%2F04%2F20161104110413_XzVAk.gif"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage sd_imageWithGIFData:data];
self.imageView.image = image;
}
@end
删除内存缓存
#import "AppDelegate.h"
#import <SDImageCache.h>
#import <SDWebImageManager.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
//内存警告
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
//清空缓存
//clearDisk:直接删除,然后重新创建
//cleanDisk:清楚过期的缓存,然后计算剩下缓存的大小,再与设置的最大缓存比较,如果仍然超出那么会继续删除(删除按文件的创建时间的先后顺序)
[[SDImageCache sharedImageCache] clearDiskOnCompletion:nil];
//取消当前所有操作
[[SDWebImageManager sharedManager] cancelAll];
//最大并发数 6
//缓存文件的保存名称 - 取到图片的url然后对它进行md5加密
//该框架内部对内存警告的处理方式 - 内部通过监听通知的方式请求缓存
//该框架进行缓存处理的方式 - NSCache
//判断图片的类型 - 根据图片的第一个字节进行判断
//队列中任务的处理方式 - 先进先出
//下载图片的方式 - 发送网络请求下载图片,利用NSURLConnection
//请求超过的时间设置为 15s
}