ios开发:保存kingfisher显示的图片到本地

一,配置权限

image

二,代码:


import Kingfisher
import SwiftUI

struct DetailView: View {

    let id: Int // 接收传递过来的 id
    let destUrl = "https://baidu.com"
    let imageUrl = URL(string: "https://raw.gitcode.com/GitHub_Trending/ki/Kingfisher/raw/fa3609d1975791c0a6e6f75a56dc20a957967769/images/kingfisher-2.jpg")!
    var body: some View {
        VStack(spacing: 20) {

            Spacer()
            KFImage(imageUrl)
                   .fade(duration: 0.33)
                   .placeholder { ProgressView() }
                   .resizable()
                   .scaledToFit()
                   .frame(width: 200, height: 200)
                   
            // 2. 保存按钮
            Button(action: {
                saveImageToAlbum()
            }) {
                Label("保存图片到相册", systemImage: "square.and.arrow.down")
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
        }
        .navigationTitle("详情")
        // SwiftUI 默认在导航跳转时提供“从右向左”的滑动动画
    }
    
    // 3. 保存逻辑
    func saveImageToAlbum() {
        // 从 Kingfisher 缓存中获取图片
        let cache = ImageCache.default
        cache.retrieveImage(forKey: imageUrl.absoluteString) { result in
            switch result {
            case .success(let value):
                if let uiImage = value.image {
                    // 调用系统方法保存到相册
                    UIImageWriteToSavedPhotosAlbum(uiImage, nil, nil, nil)
                    print("保存成功")
                } else {
                    print("缓存中未找到图片,请确保图片已加载完毕")
                }
            case .failure(let error):
                print("获取缓存图片失败: \(error)")
            }
        }
    }
}

 

三,测试效果:

image

 

posted @ 2026-04-05 16:20  刘宏缔的架构森林  阅读(5)  评论(0)    收藏  举报