Swift ThirdPod Kingfisher图片加载器(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

Swift-Kingfisher(图片加载)下载代码

第三方

pod 'Kingfisher', '~> 7.12.0'

效果

在这里插入图片描述

使用

UIButton+Kingfisher

该封装是给按键添加一个网络加载图片和加载背景图片的方法,使用起来非常方便

按键图片

 // 使用扩展设置网络图片
 button.sp.setImage(
     urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
     for: .normal,
     placeholder: UIImage(named: "placeholder")
 )

按键背景图片

// 使用扩展设置背景图片
backgroundImageButton.sp.setBackgroundImage(
    urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
    for: .normal,
    placeholder: UIImage(named: "bgPlaceholder"),
    progresseCellBack: { receivedSize, totalSize in
        print("背景图片下载进度: \(Float(receivedSize)/Float(totalSize))")
    },
    completionHandler: { result in
        switch result {
        case .success(let value):
            print("背景图片下载完成: \(value.source.url?.absoluteString ?? "")")
        case .failure(let error):
            print("背景图片下载失败: \(error.localizedDescription)")
        }
    }
)

UIImageView+Kingfisher

该封装是给图片添加一个网络加载图片的方法,使用起来非常方便
完整用法

// 使用扩展设置网络图片(完整版)
imageView.sp.setImage(
    urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
    placeholder: UIImage(),
    progresseCellBack: { receivedSize, totalSize in
        print("图片下载进度: \(Float(receivedSize)/Float(totalSize))")
    },
    completionHandler: { result in
        switch result {
        case .success(let value):
            print("图片下载完成: \(value.source.url?.absoluteString ?? "")")
        case .failure(let error):
            print("图片下载失败: \(error.localizedDescription)")
        }
    }
)

简便用法

// 使用扩展设置网络图片(简化版)
simpleImageView.sp.setImage(
    urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
    placeholder: UIImage()
)

SPWebImage

对Kingfisher的相关设置

import UIKit
import SnapKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        
        //1. 基本图片下载与显示
        let imageView = UIImageView()
        let imageUrl = "https://example.com/image.jpg"

        // 或者直接使用 SPWebImageDownloader
        SPWebImage.downloader.download(urlStr: imageUrl, completionHandler:  { result in
            switch result {
            case .success(let loadingResult):
                imageView.image = loadingResult.image
            case .failure(let error):
                print("下载失败: \(error.localizedDescription)")
                // 可以设置占位图或错误图
                imageView.image = UIImage(named: "placeholder")
            }
        })
        
        //2. 带进度回调的图片下载
        let imageUrl_0 = "https://example.com/large-image.jpg"

        SPWebImage.downloader.download(
            urlStr: imageUrl_0,
            progressBlock: { receivedSize, totalSize in
                let progress = Float(receivedSize) / Float(totalSize)
                print("下载进度: \(progress * 100)%")
            },
            completionHandler: { result in
                switch result {
                case .success(let loadingResult):
                    print("图片下载完成,尺寸: \(loadingResult.image.size)")
                case .failure(let error):
                    print("下载失败: \(error.localizedDescription)")
                }
            }
        )
        
        //3. 缓存管理
        // 清除内存缓存
        SPWebImage.cache.clearMemoryCache()

        // 清除磁盘缓存(异步)
        SPWebImage.cache.clearDiskCache {
            print("磁盘缓存已清除")
        }

        // 获取缓存大小
        SPWebImage.cache.getDiskBytes { size in
            let sizeInMB = Double(size) / 1024 / 1024
            print("当前磁盘缓存大小: \(String(format: "%.2f", sizeInMB)) MB")
        }

        // 设置缓存大小限制为 100MB
        SPWebImage.cache.setMaxDiskCacheSize(cacheSizeMB: 100)

        // 设置缓存过期时间为 7 天
        SPWebImage.cache.setMaxCachePeriodInSecond(days: 7)

        // 清理过期缓存
        SPWebImage.cache.cleanExpiredDiskCache {
            print("过期缓存已清理")
        }

    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯汉栩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值