zoukankan      html  css  js  c++  java
  • [Swift通天遁地]五、高级扩展-(11)图像加载Loading动画效果的自定义和缓存

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(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,  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 }
  • 相关阅读:
    egret-使用URLLoader 设置不同的dataFormat 加载不同的资源
    egret新手指南--自定义组件
    事件的三个阶段
    事件派发,事件机制
    屏幕适配
    断线重连机制
    电影屏幕字从天上掉下来的效果
    使用select2 实现select多选与初始化数据。
    ul高度为0 li高度为0
    php生成json文件,以zip压缩包批量下载。
  • 原文地址:https://www.cnblogs.com/strengthen/p/10260084.html
Copyright © 2011-2022 走看看