core-data - 在迭代数组后通过 .sheet 显示模态时显示相同的图像
问题描述
在一个 swiftui 应用程序中,我正在迭代一个实体数组并显示缩略图图像,并设置它,当点击一个时,会显示一个带有该特定全尺寸图像的详细视图。问题是它总是在进入详细信息屏幕时显示的最新图像。
主视图:
if documents.count > 0 {
ScrollView(.horizontal, showsIndicators: true) {
HStack {
ForEach(documents, id: \.self.id) {(doc: Document) in
Image(uiImage: UIImage(data: doc.image)!)
.resizable()
.frame(width: 40, height: 50, alignment: .center)
.clipShape(Rectangle())
.cornerRadius(8)
.scaledToFit()
.onTapGesture {
self.showImageDetail = true
}
.padding(.all, 5)
.sheet(isPresented: self.$showImageDetail, content: {
ImageViewDetail(image: UIImage(data: doc.image)!)
})
}
}
}
}
当 ImageDetailView 显示时,它始终是最新保存的图像。下面是详细视图代码:
import SwiftUI
struct ImageViewDetail: View {
@Environment(\.presentationMode) var presentationMode
@State var image: UIImage
@State var scale: CGFloat = 1.0
var body: some View {
VStack {
Image(uiImage: image)
.resizable()
.padding()
.scaledToFit()
.scaleEffect(scale)
.cornerRadius(8)
.gesture(MagnificationGesture()
.onChanged {value in
self.scale = value.magnitude
}
)
HStack {
Button("Back") {
self.presentationMode.wrappedValue.dismiss()
}
.buttonStyle(FillStyle(width: 86, height: 32))
.padding(.trailing, 10)
Button("Delete") {
}
.buttonStyle(FillStyle(width: 86, height: 32))
.padding(.leading, 10)
}
}
.navigationBarTitle("Image", displayMode: .inline)
}
}
任何帮助将不胜感激 - 我似乎看不出为什么 ImageDetailView 不显示正确的图像?提前谢谢了。
解决方案
Bool
用状态替换Document?
状态:
@State var selectedDocument: Document?
var body: some View {
HStack {
ForEach(documents, id: \.self.id) {(doc: Document) in
Image(uiImage: UIImage(data: doc.image)!)
.onTapGesture {
self.selectedDocument = doc
}
}
}
}
.sheet(item: $selectedDocument) {
ImageViewDetail(image: UIImage(data: $0.image)!)
}
}
推荐阅读
- python - ANN 超参数调整 - R2 值、MSE 和 MAE 值不一致
- flutter - Flutter 通过单击 Windows 更改文本字段时,我如何调用 TextFormField onTap 或 onChanged,如 onFieldSubmitted
- excel - 从 Office 脚本创建新工作簿
- java - 如果 ArrayList 为空,如何返回 NaN
- java - 如何复制二维数组 使用循环,将考试 1 和 2 的所有分数复制到新的二维数组中。(不包括 -1 值)
- docker - 离线构建docker镜像
- css - 如何在不剪切嵌入式视频的情况下更改嵌入式 TikTok 小部件的高度?
- r - 使用 purrr::pwalk 从 tibble 创建多个闪亮的 observeEvents
- powershell - PowerShell 副本项
- json - JOLT:复制键值和过滤器数组