★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10260084.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

本文将演示图像加载Loading动画效果的自定义和缓存。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

1 platform :ios, '12.0'
2 use_frameworks!
3
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'Kingfisher'
7 end

根据配置文件中的相关配置,安装第三方库。

然后点击打开【DemoApp.xcworkspace】项目文件。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

  1 import UIKit
  2 //在当前的类文件中,引入已经安装的第三方类库
  3 import Kingfisher
  4
  5 class ViewController: UIViewController {
  6
  7     //添加一个图像视图变量,作为当前类的属性
  8     var imageView : UIImageView!
  9     override func viewDidLoad() {
 10         super.viewDidLoad()
 11         // Do any additional setup after loading the view, typically from a nib.
 12
 13         //设置根视图的背景颜色为橙色
 14         self.view.backgroundColor = UIColor.orange
 15
 16         //从项目中读取一张图片
 17         //创建一个图像视图,显示加载的图片
 18         let image = UIImage(named: "background")
 19         //设置图像视图的显示区域为当前的视图控制器
 20         imageView = UIImageView(image: image)
 21         //设置图像视图的边界
 22         imageView.frame = self.view.bounds
 23         //将图像视图添加到根视图
 24         self.view.addSubview(imageView)
 25
 26         //添加一个图像按钮,
 27         //当用户点击该按钮时,下载一张网络图片
 28         let button = UIButton(frame: CGRect(x: 0, y: 528, width: 320, height: 40))
 29         //设置按钮的背景颜色为橙色
 30         button.backgroundColor = UIColor.orange
 31         //同时设置正常
 32         button.setTitle("Load image again", for: .normal)
 33         //给按钮控件绑定点击事件
 34         button.addTarget(self,
 35                         action: #selector(ViewController.loadImage),
 36                         for: .touchUpInside)
 37         //将按钮添加到根视图
 38         self.view.addSubview(button)
 39     }
 40
 41     //添加一个方法,用来响应按钮的点击事件
 42     @objc func loadImage()
 43     {
 44         //初始化一个网址对象,作为网络图片的地址
 45         let url = URL(string: "http://images.apple.com/v/iphone-7/d/images/films/product_large_2x.jpg")
 46         //设置网络图片加载功能动画的样式,这里使用系统默认的动画Loaing
 47         imageView.kf.indicatorType = .activity
 48         //将图像视图的显示内容,修改为下载后的图片
 49         imageView.kf.setImage(with: url)
 50
 51
 52         //获得项目中动画资源的路径
 53         let p = Bundle.main.path(forResource: "loading", ofType: "gif")!
 54         //从项目中读取一张GIF动画
 55         let data = try! Data(contentsOf: URL(fileURLWithPath: p))
 56         //设置在下载图片时,使用这张图片的素材,作为图片下载时的Loading动画。
 57         imageView.kf.indicatorType = .image(imageData: data)
 58         //将图像视图的显示内容,修改为下载后的图片
 59         imageView.kf.setImage(with: url)
 60
 61
 62         //调用扩展方法,下载并设置网络上的图片,同时设置下载进度
 63         imageView.kf.setImage(with: url, progressBlock:
 64         {
 65             //通过已经接收的字节数和全部的字节数,计算图片下载进度的百分比
 66             receivedSize, totalSize in
 67             let percentage = (Float(receivedSize) / Float(totalSize)) * 100.0
 68             print("downloading progress: \(percentage)%")
 69         })
 70         //调用扩展方法,下载并设置网络上的图片,
 71         //当下载完成之后,使用渐显的方式显示下载的图片
 72         imageView.kf.setImage(with: url, options: [.transition(.fade(1.0))])
 73
 74         //初始化一个圆角图片处理器,并设置圆角的半径为160
 75         let processor = RoundCornerImageProcessor(cornerRadius: 160)
 76         //调用扩展方法,下载并设置网络上的图片,下载并设置网络上的图片,
 77         //同时给下载的图片添加圆角效果
 78         imageView.kf.setImage(with: url, placeholder: nil, options: [.processor(processor)])
 79
 80         //初始化一个模糊图像处理器,并设置模糊半径为4,接着再增加一个圆角处理器
 81         let processor = BlurImageProcessor(blurRadius: 4) >> RoundCornerImageProcessor(cornerRadius: 20)
 82         //调用扩展方法,下载并设置网络上的图片,同时给下载的图片添加模糊和圆角效果
 83         imageView.kf.setImage(with: url, placeholder: nil, options: [.processor(processor)])
 84
 85         //当再次给图像视图,设置同一个网络图片时,使用的是缓存的图片,
 86         //如果需要重复下载图片。可以设置下载选项为强制刷新。
 87         imageView.kf.setImage(with: url, options: [.forceRefresh])
 88
 89         //如果需要从缓存中获取图片,可以设置下载的选项为来自缓存。
 90         imageView.kf.setImage(with: url, options: [.onlyFromCache])
 91
 92
 93         //图片缓存的使用
 94         //通过图片下载器,下载指定网址的图片
 95         ImageDownloader.default.downloadImage(with: url!, options: [], progressBlock: nil)
 96         {
 97             (image, error, url, data) in
 98
 99             //将下载的图像转换成指定的图片格式
100             //let data = UIImagePNGRepresentation(image!)
101
102             //通过调用图片缓存全局对象的存储方法,将图片存储到本地,并设置存储的键值
103             ImageCache.default.store(image!, original: data, forKey: "AppleWatch", processorIdentifier: "", cacheSerializer: DefaultCacheSerializer.default, toDisk: false, completionHandler: nil)
104
105             //通过简化的方法,可以仅需指定键值,即可快速缓存图片
106             ImageCache.default.store(image!, forKey: "AppleWatch")
107             //通过键值可以快速判断在某键值下,是否存在缓存的图片。
108             print(ImageCache.default.isImageCached(forKey: "AppleWatch"))
109         }
110
111         //通过调用图片缓存全局对象的删除方法,可以删除指定键值的缓存图像
112         ImageCache.default.removeImage(forKey: "AppleWatch")
113         //通过调用图片缓存全局对象的删除磁盘缓存方法,可以删除磁盘上的所有缓存图片
114         ImageCache.default.clearDiskCache()
115         //清除内存缓存方法,可以删除在内存中缓存的所有图片
116         ImageCache.default.clearMemoryCache()
117         //清除过期的磁盘缓存方法,可以删除超过指定期限的,缓存在磁盘上的图片
118         ImageCache.default.cleanExpiredDiskCache()
119
120         //设置缓存区域的大小为50M
121         ImageCache.default.maxDiskCacheSize = 50 * 1024 * 1024
122         //设置缓存的期限为7天,
123         //超过7天的缓存图片将被删除
124         ImageCache.default.maxCachePeriodInSecond = 60 * 60 * 24 * 7
125         //设置图片下载的超时时限为30秒,当超过30秒时,下载任务失败
126         ImageDownloader.default.downloadTimeout = 30.0
127     }
128
129     override func didReceiveMemoryWarning() {
130         super.didReceiveMemoryWarning()
131         // Dispose of any resources that can be recreated.
132     }
133 }

转载于:https://www.cnblogs.com/strengthen/p/10260084.html

[Swift通天遁地]五、高级扩展-(11)图像加载Loading动画效果的自定义和缓存相关推荐

  1. [Swift通天遁地]五、高级扩展-(4)快速生成Invert、Mix、Tint、Shade颜色及调整饱和度阶...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. [Swift通天遁地]二、表格表单-(11)创建星期选项表单和拥有浮动标签的文本框

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. [Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  5. [Swift通天遁地]九、拔剑吧-(9)创建支持缩放、移动、裁切的相机视图控制器

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. [Swift通天遁地]三、手势与图表-(10)创建包含圆点、方形、三角形图标的散点图表...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  7. [Swift通天遁地]一、超级工具-(2)制作美观大方的环形进度条

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  9. [Swift通天遁地]一、超级工具-(13)使用PKHUD制作各种动态提示窗口

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. jQuery-1.样式篇---选择器
  2. cnc加工中心保养表_CNC数控加工中心,硬轨的好还是线轨的好?
  3. 计算机书籍-老年人编程自学书籍
  4. 数据中心电池室管理之经济实用性方法的探索
  5. python面向窗体的开发_Python高级进阶#019 pyqt5菜单menu应用,新建多窗体
  6. 木兰已出现,木兰已死?
  7. python推导式pythonic必备
  8. Android 源码分析(三) Service 启动分析
  9. C++之指针探究(三):指针数组和数组指针
  10. 随想录(用好Visual Studio开发平台)
  11. 【优化配置】基于matlab遗传算法求解风电混合储能容量优化配置问题【含Matlab源码 228期】
  12. 解决IE7中移动文件夹无法收藏问题
  13. 怎么报名mysql证书_报考oraclemysql认证考试的流程有哪些
  14. Java编程思想学习(五)----第5章:初始化与清理
  15. 国外项目外包网站接活流程(新手上路版)
  16. pyhton interpreter byterun和底层`code object`的简单了解
  17. 命令解压aar、文件压缩成aar图文详解
  18. 使用java数据结构编写代码
  19. 奋斗吧,程序员——第十九章 无可奈何花落去,似曾相识燕归来
  20. 用MybatisPlus代码生成器生成代码

热门文章

  1. mysql查询2个isbn数据,数据库实验二 数据查询
  2. linux 查看手机硬件信息失败,linux下硬件信息的查看总结
  3. mysql 的 distinct 去掉重复的数据
  4. CentOS7下解决yum install mysql-server没有可用包的问题
  5. maven 插件使用之:打包jar到lib
  6. C++对象模型3--无重写的单继承
  7. asteirsk 开发指南
  8. 在flask-sqlalchemy中使用max min avg方法
  9. 安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
  10. Spring JDBC事务支持类jdbcTemplate(了解)