Github每日精选第28期:Swift图像下载库 Kingfisher

Kingfisher

Kingfisher 是一个功能强大的纯 Swift 库,用于从Web下载和缓存图像。它使您有机会在下一个应用程序中使用纯 Swift 方式处理远程图像。

在这里插入图片描述

特征

  • 异步图像下载和缓存。
  • 从URLSession基于网络或本地提供的数据加载图像。
  • 提供有用的图像处理器和过滤器。
  • 内存和磁盘的多层混合缓存。
  • 对缓存行为的精细控制。可定制的到期日期和大小限制。
  • 可取消下载和自动重用以前下载的内容以提高性能。
  • 独立组件。根据需要分别使用下载器、缓存系统和图像处理器。
  • 预取图像并从缓存中显示它们以提升您的应用程序。
  • UIImageView, NSImageView, NSButton, UIButton, NSTextAttachment,和的扩展名- WKInterfaceImage,用于直接从 URL 设置图像。TVMonogramViewCPListItem
  • 设置图像时内置过渡动画。
  • 加载图像时可自定义的占位符和指示器。
  • 易于扩展的图像处理和图像格式。
  • 低数据模式支持。
  • SwiftUI 支持。

使用方法

最简单的用例是将图像设置为带有UIImageView扩展名的图像视图:

import Kingfisher

let url = URL(string: "https://example.com/image.png")
imageView.kf.setImage(with: url)

Kingfisher 将从 下载图像url,将其发送到内存缓存和磁盘缓存,并以imageView. 当您稍后使用相同的 URL 设置它时,图像将从缓存中检索并立即显示。

如果您使用 SwiftUI,它也可以工作:

var body: some View {
    KFImage(URL(string: "https://example.com/image.png")!)
}

高级的例子

借助强大的选项,您可以用 Kingfisher 以简单的方式完成艰巨的任务。例如,下面的代码:

  1. 下载高分辨率图像。

  2. 对其进行下采样以匹配图像视图大小。

  3. 使其以给定的半径转角。

  4. 下载时显示系统指示器和占位符图像。

  5. 准备好后,它会以“淡入”效果对小缩略图图像进行动画处理。

  6. 原始的大图像也被缓存到磁盘以供以后使用,以避免在详细视图中再次下载它。

  7. 任务完成时会打印控制台日志,无论是成功还是失败。

    let url = URL(string: “https://example.com/high_resolution_image.png”)
    let processor = DownsamplingImageProcessor(size: imageView.bounds.size)
    |> RoundCornerImageProcessor(cornerRadius: 20)
    imageView.kf.indicatorType = .activity
    imageView.kf.setImage(
    with: url,
    placeholder: UIImage(named: “placeholderImage”),
    options: [
    .processor(processor),
    .scaleFactor(UIScreen.main.scale),
    .transition(.fade(1)),
    .cacheOriginalImage
    ])
    {
    result in
    switch result {
    case .success(let value):
    print(“Task done for: (value.source.url?.absoluteString ?? “”)”)
    case .failure(let error):
    print(“Job failed: (error.localizedDescription)”)
    }
    }

这是我在日常工作中经常遇到的情况。想想没有Kingfisher你需要写多少行!

方法链

如果您不是kf扩展的粉丝,您也可以更喜欢使用KF构建器并链接方法调用。下面的代码做同样的事情:

// Use `kf` extension
imageView.kf.setImage(
    with: url,
    placeholder: placeholderImage,
    options: [
        .processor(processor),
        .loadDiskFileSynchronously,
        .cacheOriginalImage,
        .transition(.fade(0.25)),
        .lowDataMode(.network(lowResolutionURL))
    ],
    progressBlock: { receivedSize, totalSize in
        // Progress updated
    },
    completionHandler: { result in
        // Done
    }
)

// Use `KF` builder
KF.url(url)
  .placeholder(placeholderImage)
  .setProcessor(processor)
  .loadDiskFileSynchronously()
  .cacheMemoryOnly()
  .fade(duration: 0.25)
  .lowDataModeSource(.network(lowResolutionURL))
  .onProgress { receivedSize, totalSize in  }
  .onSuccess { result in  }
  .onFailure { error in }
  .set(to: imageView)

更好的是,如果以后你想切换到 SwiftUI,只需将KF上面的内容更改为KFImage,你就完成了:

struct ContentView: View {
    var body: some View {
        KFImage.url(url)
          .placeholder(placeholderImage)
          .setProcessor(processor)
          .loadDiskFileSynchronously()
          .cacheMemoryOnly()
          .fade(duration: 0.25)
          .lowDataModeSource(.network(lowResolutionURL))
          .onProgress { receivedSize, totalSize in  }
          .onSuccess { result in  }
          .onFailure { error in }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340