swift之网络下载图片sdwebImage、Kingfisher
2018-02-03 18:52
549 查看
参考:https://www.jianshu.com/p/55bbfbdf78de
=============方法一:使用sdwebImage
下载地址:https://github.com/rs/SDWebImage
在桥接文件中导入
#import <SDWebImage/UIImageView+WebCache.h>
使用:
let imagev:UIImageView=UIImageView.init(frame:CGRect(x:0,y:0,width:100,height:100))
view .addSubview(imagev)
imagev.sd_setImage(with:
NSURL.init(string:
"http://test.ahwofu.com/public/upload/ad/2018/01-13/abc1cc5d2e661e4a")!
as URL, placeholderImage:
UIImage.init(named:
"bannerhomeOne"), options: [], progress: nil, completed:nil)
==============方法二:Kingfisher
下载地址:https://github.com/onevcat/Kingfisher
图片缓存ImageCache 使用
ImageChache 给你提供了多级缓存,可以使用内存、磁盘存储,还提供了存储、检索、清除图片、移除等操作,如果你需要监听到磁盘的变化可以通过
// ImageCache,默认是
let cache =
ImageCache.default
// 设置内存缓存的大小,默认是0 pixel表示no limit ,注意它是像素为单位,与我们平时的bytes不同
cache.maxMemoryCost =10 *
1024 *
1024
// 磁盘缓存大小,默认0 bytes表示no limit (50 * 1024)
cache.maxDiskCacheSize =50 *
1024 *
1024
// 设置缓存周期 (默认1 week)
cache.maxCachePeriodInSecond =60 *
60 *
24 *7
// 存储一张图片, Key 可用于后期检索资源、删除以及在删除时的一个通知参数
cache.store(UIImage(named:"test")!, forKey:
"test")
// 删除
cache.removeImage(forKey:"test")
// 检索图片
let imgDisk =
cache.retrieveImageInDiskCache(forKey:"test")
let imgMemo =
cache.retrieveImageInMemoryCache(forKey:"test")
// 异步检索
cache.retrieveImage(forKey:"test", options:
nil) { (_,_)
in
}
// 清除
cache.clearDiskCache()
cache.clearMemoryCache()
cache.clearDiskCache {
}
// 清除过期缓存
cache.cleanExpiredDiskCache()
cache.cleanExpiredDiskCache {
}
cache.backgroundCleanExpiredDiskCache()// 后台清理,但不需要回调
// 判定图片是否存在
let cached = cache.isImageCached(forKey:"test")
// 监听数据移除
NotificationCenter.default.addObserver(self, selector:#selector(cleanDiskCache), name:
NSNotification.Name.init("KingfisherDidCleanDiskCacheNotification"), object:nil)
==========下载图片带进度
下载图片:
图片加载ImageDownloader使用
从名字就可以很清楚的知道,这个类就是用来下载图片的,它为我们提供了一些头的设置(比如说你有些图片是需要认证用户才能下载的);安全设置:我们在下载图片时哪些Host是可信任的;下载超时设置;下载回调等。
let downloader =
ImageDownloader.default
// 设置可信任的Host
let hosts:
Set<String> = ["http://xxxxx.com","http://#####.com"]
downloader.trustedHosts =hosts
// 设置sessionConfiguration
downloader.sessionConfiguration =URLSessionConfiguration.default
// 设置代理,详情参考 ImageDownloaderDelegate
downloader.delegate =self
// 下载超时设置
downloader.downloadTimeout =20
// 下载图片
let retriveTask =
downloader.downloadImage(with:
URL(string: "http://xxx.com")!, retrieveImageTask:nil, options:
nil, progressBlock:nil, completionHandler: {
(image, error, imageURL, originalData) in
})
// 取消下载
retriveTask?.cancel()
=====================直接下载设置图片
使用:
引入import Kingfisher
let imagev:UIImageView=UIImageView.init(frame:CGRect(x:0,y:50,width:100,height:100))
view.addSubview(imagev)
imagev.kf.setImage(with:ImageResource(downloadURL:URL.init(string:"http://www.ahwofu.com/upload/201710/1508813630.jpg")!))
============主控制器KingfisherManager使用
KingfisherManager是连接ImageDownloader与ImageCache的,所以你可以通过manager得到 downloader与cache,并且还能改设置加载选项,当然你也可以设置其他的ImageDownloader与ImageCache到你的Manager。
let kfManager =
KingfisherManager.shared
// 通过manager 获取cache
cache = kfManager.cache
// 通过manager 获取downloader
downloader = kfManager.downloader
// 设置options, 你可以设置你的newCache/newDownloader以及其他配置
kfManager.defaultOptions = [.targetCache(newCache), .downloader(newDownloader), .forceRefresh, .backgroundDecode, .onlyFromCache, .downloadPriority(1.0)]
// 检索
let resource = ImageResource(downloadURL:URL(string:
"http://xxxx.com")!, cacheKey:"text")
let retriveImageTask =
kfManager.retrieveImage(with:
resource, options: nil, progressBlock:
nil, completionHandler: {
(image, error, cacheType, imageURL) in
if error == nil {
print("检索图片成功")
} else {
print("检索图片失败")
}
})
retriveImageTask.cancel()
================
Kingfisher 提供了UIButton与UIImageView的扩展,使你可以通过直接设置图片URL来显示,两者用法差不多,以UIImageView为例:
// 设置网络图片
imageView.kf.setImage(with: ImageResource(downloadURL: imageURL!))
imageView.kf.setImage(with: ImageResource(downloadURL: imageURL!), placeholder:UIImage(named:
"test"), options:nil, progressBlock:
nil, completionHandler:
nil)
// UIImageView 也可以设置取消加载 (两种方式)
imageView.kf.cancelDownloadTask()
let retriveImaeTask = imageView.kf.setImage(with:ImageResource(downloadURL: imageURL!))
retriveImaeTask.cancel()
=============方法一:使用sdwebImage
下载地址:https://github.com/rs/SDWebImage
在桥接文件中导入
#import <SDWebImage/UIImageView+WebCache.h>
使用:
let imagev:UIImageView=UIImageView.init(frame:CGRect(x:0,y:0,width:100,height:100))
view .addSubview(imagev)
imagev.sd_setImage(with:
NSURL.init(string:
"http://test.ahwofu.com/public/upload/ad/2018/01-13/abc1cc5d2e661e4a")!
as URL, placeholderImage:
UIImage.init(named:
"bannerhomeOne"), options: [], progress: nil, completed:nil)
==============方法二:Kingfisher
下载地址:https://github.com/onevcat/Kingfisher
图片缓存ImageCache 使用
ImageChache 给你提供了多级缓存,可以使用内存、磁盘存储,还提供了存储、检索、清除图片、移除等操作,如果你需要监听到磁盘的变化可以通过
KingfisherDidCleanDiskCacheNotification添加通知。
// ImageCache,默认是
let cache =
ImageCache.default
// 设置内存缓存的大小,默认是0 pixel表示no limit ,注意它是像素为单位,与我们平时的bytes不同
cache.maxMemoryCost =10 *
1024 *
1024
// 磁盘缓存大小,默认0 bytes表示no limit (50 * 1024)
cache.maxDiskCacheSize =50 *
1024 *
1024
// 设置缓存周期 (默认1 week)
cache.maxCachePeriodInSecond =60 *
60 *
24 *7
// 存储一张图片, Key 可用于后期检索资源、删除以及在删除时的一个通知参数
cache.store(UIImage(named:"test")!, forKey:
"test")
// 删除
cache.removeImage(forKey:"test")
// 检索图片
let imgDisk =
cache.retrieveImageInDiskCache(forKey:"test")
let imgMemo =
cache.retrieveImageInMemoryCache(forKey:"test")
// 异步检索
cache.retrieveImage(forKey:"test", options:
nil) { (_,_)
in
}
// 清除
cache.clearDiskCache()
cache.clearMemoryCache()
cache.clearDiskCache {
}
// 清除过期缓存
cache.cleanExpiredDiskCache()
cache.cleanExpiredDiskCache {
}
cache.backgroundCleanExpiredDiskCache()// 后台清理,但不需要回调
// 判定图片是否存在
let cached = cache.isImageCached(forKey:"test")
// 监听数据移除
NotificationCenter.default.addObserver(self, selector:#selector(cleanDiskCache), name:
NSNotification.Name.init("KingfisherDidCleanDiskCacheNotification"), object:nil)
==========下载图片带进度
下载图片:
图片加载ImageDownloader使用
从名字就可以很清楚的知道,这个类就是用来下载图片的,它为我们提供了一些头的设置(比如说你有些图片是需要认证用户才能下载的);安全设置:我们在下载图片时哪些Host是可信任的;下载超时设置;下载回调等。
let downloader =
ImageDownloader.default
// 设置可信任的Host
let hosts:
Set<String> = ["http://xxxxx.com","http://#####.com"]
downloader.trustedHosts =hosts
// 设置sessionConfiguration
downloader.sessionConfiguration =URLSessionConfiguration.default
// 设置代理,详情参考 ImageDownloaderDelegate
downloader.delegate =self
// 下载超时设置
downloader.downloadTimeout =20
// 下载图片
let retriveTask =
downloader.downloadImage(with:
URL(string: "http://xxx.com")!, retrieveImageTask:nil, options:
nil, progressBlock:nil, completionHandler: {
(image, error, imageURL, originalData) in
})
// 取消下载
retriveTask?.cancel()
=====================直接下载设置图片
使用:
引入import Kingfisher
let imagev:UIImageView=UIImageView.init(frame:CGRect(x:0,y:50,width:100,height:100))
view.addSubview(imagev)
imagev.kf.setImage(with:ImageResource(downloadURL:URL.init(string:"http://www.ahwofu.com/upload/201710/1508813630.jpg")!))
============主控制器KingfisherManager使用
KingfisherManager是连接ImageDownloader与ImageCache的,所以你可以通过manager得到 downloader与cache,并且还能改设置加载选项,当然你也可以设置其他的ImageDownloader与ImageCache到你的Manager。
let kfManager =
KingfisherManager.shared
// 通过manager 获取cache
cache = kfManager.cache
// 通过manager 获取downloader
downloader = kfManager.downloader
// 设置options, 你可以设置你的newCache/newDownloader以及其他配置
kfManager.defaultOptions = [.targetCache(newCache), .downloader(newDownloader), .forceRefresh, .backgroundDecode, .onlyFromCache, .downloadPriority(1.0)]
// 检索
let resource = ImageResource(downloadURL:URL(string:
"http://xxxx.com")!, cacheKey:"text")
let retriveImageTask =
kfManager.retrieveImage(with:
resource, options: nil, progressBlock:
nil, completionHandler: {
(image, error, cacheType, imageURL) in
if error == nil {
print("检索图片成功")
} else {
print("检索图片失败")
}
})
retriveImageTask.cancel()
================
Kingfisher 提供了UIButton与UIImageView的扩展,使你可以通过直接设置图片URL来显示,两者用法差不多,以UIImageView为例:
// 设置网络图片
imageView.kf.setImage(with: ImageResource(downloadURL: imageURL!))
imageView.kf.setImage(with: ImageResource(downloadURL: imageURL!), placeholder:UIImage(named:
"test"), options:nil, progressBlock:
nil, completionHandler:
nil)
// UIImageView 也可以设置取消加载 (两种方式)
imageView.kf.cancelDownloadTask()
let retriveImaeTask = imageView.kf.setImage(with:ImageResource(downloadURL: imageURL!))
retriveImaeTask.cancel()
相关文章推荐
- 网络图片下载缓存库SDWebImage的使用
- 网络多线程-下载图片(不用SDWebImage框架)
- 网络多线程下载图片(SDWebImage)
- AJ学IOS(55)多线程网络之图片下载框架之SDWebImage
- iOS 下载缓存网络图片 SDWebImage
- IOS开发-第三方SDWebImage下载网络图片的使用
- 猫猫学iOS(五十五)多线程网络之图片下载框架之SDWebImage
- IOS网络图片缓存之SDWebImage
- SDWebImage(专门用来下载图片)
- 多线程:使用ImageView下载图片(模仿 SDWebImage)
- 网络加载图片缓存与SDWebImage
- 使用SDWebImage进行异步图片下载和缓存管理
- Cell中实现高效的下载图片及强大的SDWebImage(2015428)
- SDWebImage加载网络图片
- 第三方库SDWebImage(用于下载图片和设置缓存)
- 多线程:使用ImageView分类下载图片(模仿 SDWebImage)
- SDWebImage 加载网络图片
- SDWebImage加载网络图片
- 关于SDWebImage中下载图片和缓存图片的实现原理
- 在tableviewcell 加载图片,解决第三方SDWebImage网络不是很通畅的状态下往下拉不能加载图片