一,配置权限
![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]()