113 lines
3.3 KiB
Swift
Executable File
113 lines
3.3 KiB
Swift
Executable File
//
|
||
// UIImageView+Ext.swift
|
||
// E-Wow
|
||
//
|
||
// Created by lym on 2021/1/8.
|
||
//
|
||
|
||
import Foundation
|
||
import Kingfisher
|
||
import UIKit
|
||
|
||
extension UIImageView
|
||
{
|
||
private static let defaultOptions: KingfisherOptionsInfo = [
|
||
.transition(.none),
|
||
.loadDiskFileSynchronously,
|
||
]
|
||
|
||
/**
|
||
无s3逻辑
|
||
默认给图片设置bgColor(csbn)
|
||
*/
|
||
func loadImage(_ url: String?,
|
||
placeholder: Placeholder? = nil,
|
||
bgColor: UIColor? = .c.csbn,
|
||
options: KingfisherOptionsInfo? = defaultOptions)
|
||
{
|
||
backgroundColor = bgColor
|
||
kf.setImage(with: URL(string: url ?? ""), placeholder: placeholder, options: options)
|
||
}
|
||
|
||
/// - Parameters:
|
||
/// - urlString: 图片的URL字符串
|
||
/// - placeholder: 占位图(可选)
|
||
/// - progressBlock: 进度回调,接收已下载字节和总字节
|
||
/// - completionBlock: 完成回调,接收加载结果
|
||
func loadImage(
|
||
_ urlString: String?,
|
||
placeholder: Placeholder? = nil,
|
||
bgColor: UIColor? = .hexInt32(0xFBDEFF).withAlphaComponent(0.08),
|
||
progressBlock: ((_ receivedSize: Int64, _ totalSize: Int64) -> Void)? = nil,
|
||
completionBlock: ((Result<RetrieveImageResult, KingfisherError>) -> Void)? = nil
|
||
) {
|
||
guard let urlString = urlString, let url = URL(string: urlString) else {
|
||
completionBlock?(.failure(.requestError(reason: .emptyRequest)))
|
||
return
|
||
}
|
||
|
||
kf.setImage(
|
||
with: url,
|
||
placeholder: placeholder,
|
||
options: nil,
|
||
progressBlock: { receivedSize, totalSize in
|
||
// 进度回调
|
||
progressBlock?(receivedSize, totalSize)
|
||
},
|
||
completionHandler: { result in
|
||
// 完成回调
|
||
completionBlock?(result)
|
||
}
|
||
)
|
||
}
|
||
|
||
|
||
}
|
||
|
||
struct ImageDownloader {
|
||
/// 使用 Kingfisher 下载图片,带 completion 回调
|
||
// static func downloadImage(
|
||
// from url: URL?,
|
||
// completion: @escaping (UIImage?) -> Void
|
||
// ) {
|
||
// guard let url = url else {
|
||
// completion(nil)
|
||
// return
|
||
// }
|
||
//
|
||
// KingfisherManager.shared.retrieveImage(with: url) { result in
|
||
// switch result {
|
||
// case .success(let value):
|
||
// completion(value.image) // 成功
|
||
// case .failure(let error):
|
||
// print("❌ 图片下载失败: \(error)")
|
||
// completion(nil)
|
||
// }
|
||
// }
|
||
// }
|
||
|
||
/// 使用 Kingfisher 下载图片,传入可选 String 链接
|
||
static func downloadImage(
|
||
from urlString: String?,
|
||
completion: @escaping (UIImage?) -> Void
|
||
) {
|
||
guard
|
||
let urlString = urlString,
|
||
let url = URL(string: urlString)
|
||
else {
|
||
completion(nil)
|
||
return
|
||
}
|
||
|
||
KingfisherManager.shared.retrieveImage(with: url) { result in
|
||
switch result {
|
||
case .success(let value):
|
||
completion(value.image) // 成功返回 UIImage
|
||
case .failure(let error):
|
||
print("❌ 图片下载失败: \(error)")
|
||
completion(nil)
|
||
}
|
||
}
|
||
}
|
||
}
|