Kingfisher提供图像下载功能,可以通过这款软件配置网络图像下载方案,让用户可以从web下载图像使用,您可以配置图像缓存方案,直接输入远程图像地址就可以读取图像资源,也可以从数据提供商获取图像,软件可以获取的图像来源方案还是很多的,支持来自本地文件的图像,LocalFileImageDataPvider是符合的类型ImageDataPvider,它用于从本地文件L加载图像,支持图片来自Base Stng,使用BaseImageDataPvider以从编码数据的base提供图像,您期望的所有其他功能(例如缓存或图像处理器)都应该像从L获取图像时一样工作,支持从Asset生成图像,用于AssetImageDataPvider从L或Asset在给定时间生成图像!
Kingfisher软件功能
Kingfisher是一个功能强大的纯Swift库,用于从Web下载和缓存图像。它为您提供了使用纯Swift方法在下一个应用程序中处理远程图像的机会。
特征
异步图像下载和缓存。
从LSession基于网络的连接或本地提供的数据中加载图像。
提供了有用的图像处理器和滤镜。
内存和磁盘的多层混合高速缓存。
对缓存行为的精细控制。可自定义的到期期和大小限制。
取消下载并自动重用以前下载的内容以提高能。
组件。根据需要分别使用下载器,缓存系统和图像处理器。
预取图像并从缓存中显示它们以增强您的应用程序。
查看,和的扩展名UIImageView,以直接从L设置图像。NSImageViewNSButtonUIButton
设置图像时内置的过渡动画。
加载图像时可自定义的占位符和指示符。
易于扩展的图像处理和图像格式。
低数据模式支持。
SwiftUI支持。
Kingfisher软件特色
1、下载高分辨率图像。
2、对其进行下采样以匹配图像视图的大小。
3、使它以给定的半径圆角化。
4、下载时显示系统指示器和占位符图像。
5、准备好后,它会以“淡入”效果为小缩略图动画化。
6、原始的大映像也被缓存到磁盘中以备后用,从而避免了在详细视图中再次下载它。
7、任务完成时(无论是成功还是失败)都会打印控制台志。
Kingfisher教程
最常见的任务
视图扩展基于API的(对UIImageView,NSImageView,UIButton和NSButton)应该是你的首选只要有可能。它使您的代码简单而优雅。
用设置图像 L
let url = L(字符串:“ https://example.com/image.jpg ”)
imageView。KF。setImage(带有:url)
这个简单的代码:
1、是否在key下缓存了图像url.absoluteStng。
2、如果在缓存(在内存或磁盘)中找到了映像,请将其设置为imageView.image。
3、如果不是,请创建一个请求并从下载url。
4、将下载的数据转换为UIImage对象。
5、将映像缓存到内存缓存,并将数据存储到磁盘缓存。
6、设置imageView.image以显示它。
稍后,当您再次调用setImage同一个命令url时,除非清除了缓存,否则仅执行前两个步骤。
显示一个占位符
let image = UIImage(名为:“ deflt_pfile_icon ”)
imageView。KF。setImage(带有:url,占位符:image)
该image会显示在imageView从同时下载url。
您还可以使用自定义UIView或NSView占位符,使其符合以下条件Placeholder:
在MyView向/从除去实例将被添加imageView根据需要。
下载时显示加载指示器
UIActivityIndicatorView下载时在图像视图的显示一个。
淡入下载的图像
imageView.kf.setImage(with: url, options: [.transition(.fade(0.2))])
完成处理程序
圆角图像
在没有UI的情况下获取图像
有时,您只想使用Kingfisher来获取图像,而不是将其设置为图像视图。用途KingfisherMar:
快取
翠鸟(Kingfisher)正在使用混合存储ImageCache来管理缓存的图像,它由内存存储和磁盘存储组成,并提供了高级API来作缓存系统。如果未指定,该ImageCache.deflt实例将在Kingfisher中使用。
使用另一个缓存键
默认情况下,absoluteStngofurl将用作缓存键。您可以通过ImageResource使用自己的密钥创建一个来更改它。
翠鸟稍后将使用cacheKey来搜索缓存中的图像。对不同的图像使用不同的键。
缓存中是否有图像
如果在检索图像时使用了处理器,则处理后的图像将存储在缓存中。在这种情况下,还要传递处理器标识符:
从缓存中获取图像
设置缓存限制
对于内存存储,可以设置其totalCostLimit和countLimit:
默认情况下,totalCostLimit内存缓存的容量为设备中总内存的25%,并且图像数量没有限制。
对于磁盘存储,您可以sizeLimit在文件系统上设置空间。
设置缓存的默认过期时间
内存存储和磁盘存储都具有默认的过期设置。从上次访问开始,内存存储器中的图像将在5分钟后过期,而磁盘存储器中的图像则是一周。您可以通过以下方式更改此值:
如果要在缓存某个图像时覆盖此到期时间,请传入一个选项:
过期的内存缓存将清除2分钟。如果您希望它更频繁地发生:
存储图像以手动缓存
默认情况下,查看扩展方法,KingfisherMar并将存储检索到的图像以自动缓存。但是,您也可以存储图像以缓存自己:
如果您拥有该图像的原始数据,还可以将其传递给ImageCache,这将有助于Kingfisher确定应以哪种格式存储图像:
手动从缓存中删除图像
翠鸟自动管理其缓存。但是您仍然可以手动从缓存中删除某个图像:
cache.deflt.removeImage(forKey: cacheKey)
或者,通过更多控制:
清除缓存
报告磁盘存储大小
创建自己的缓存并使用它
手动下载图像
通常,您可以使用Kingfisher的视图扩展方法或KingfisherMar检索图像。他们将尝试首先在缓存中搜索,以防止不必要的下载任务。在某些情况下,如果您只想下载目标图像而不缓存它:
发送前修改请求
对图像资源具有权限控制后,可以使用以下命令修改请求.requestModifier:
异步请求修饰符
如果您需要在修改请求之前执行一些异步作,请创建一个类型并遵循AsyncImageDownloadRequestModifier:
与上述类似,您可以使用.requestModifier来使用此修饰符。在这种情况下,setImage(with:options:)orImageDownloader.downloadImage(with:options:)方法将不再返回DownloadTask(因为它不会立即启动下载任务)。相反,onDownloadTaskStarted如果需要引用任务,则可以从回调中观察到一个:
取消下载任务
如果开始下载,DownloadTask将返回a。您可以使用它来取消正在进行的下载任务:
如果调用时任务已经完成task?.cancel(),则不会发生任何事情。
类似地,视图扩展方法也返回DownloadTask。您可以存储和取消它:
或者,您可以调用cancelDownloadTask图像视图来取消当前的下载任务:
身份验证 NSLCredential
在ImageDownloader使用默认的行为(.performDefltHandling当从接收到一个)。如果您需要提供自己的凭据,请设置thenticationChallengeResponder:
近期热门