From 1527be4329891d7501377810ea51da9d769529a7 Mon Sep 17 00:00:00 2001 From: Ching Date: Mon, 20 Mar 2023 23:17:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(InstanceInfoView):=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E5=AE=9E=E4=BE=8B=E4=BF=A1=E6=81=AF=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=20thumbnail=20image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动加载实例信息中的 thumbnail image Signed-off-by: Ching --- DUDUJI/Views/InstanceInfoView.swift | 44 ++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/DUDUJI/Views/InstanceInfoView.swift b/DUDUJI/Views/InstanceInfoView.swift index 854f83f..69b043d 100644 --- a/DUDUJI/Views/InstanceInfoView.swift +++ b/DUDUJI/Views/InstanceInfoView.swift @@ -7,15 +7,57 @@ import SwiftUI +class ImageLoader: ObservableObject { + @Published var image: UIImage? + + func loadImage(from url: URL) { + URLSession.shared.dataTask(with: url) { data, _, error in + guard let data = data, error == nil else { + return + } + DispatchQueue.main.async { + self.image = UIImage(data: data) + } + }.resume() + } +} + struct InstanceInfoView: View { // @ObservedObject private var instanceViewModel = InstanceViewModel() var instance: Instance + @StateObject private var imageLoader = ImageLoader() + var body: some View { VStack(alignment: .leading) { Text("实例名称: \(instance.title)") Text("实例人数: \(instance.userCount != nil ? "\(instance.userCount!)" : "N/A")") Text("嘟嘟数量: \(instance.statusCount != nil ? "\(instance.statusCount!)" : "N/A")") - Text("缩略图: \(instance.thumbnail?.absoluteString ?? "N/A")") + // TODO: 更新图片后不应该先显示旧图片然后再显示新图片,应该是占位符 -> 新图片 + Group { + if let imageURL = instance.thumbnail { + if let image = imageLoader.image { + Image(uiImage: image) + .resizable() + .scaledToFit() + .frame(maxWidth: .infinity) + .onAppear { + imageLoader.loadImage(from: imageURL) + } + } else { + VStack { + Text("缩略图: 加载中...") + ProgressView() // 或者其他视图 + } + + .frame(maxWidth: .infinity) + .onAppear { + imageLoader.loadImage(from: imageURL) + } + } + } else { + Text("缩略图: N/A") + } + } Text("简介: \(instance.shortDescription ?? "N/A")") Text("介绍: \(instance.description ?? "N/A")") }