【问题标题】:SwiftUI - Display an array of ImageSwiftUI - 显示图像数组
【发布时间】:2021-02-22 20:33:27
【问题描述】:

我正在使用 Apple 的 VisionKit 并将图像存储在 ImageData 数组中,如下所示:

@State private var image: [Image] = []
@State var imageData : Data = .init(count: 0)

并像这样附加数据:

for imageIndex in imagePerPage! {
  var uiImage = UIImage(cgImage: imageIndex)
  let converted = Image(uiImage: uiImage)
  image.append(converted)
  imageData.append(uiImage.jpegData(compressionQuality: 0.00005)!)
}

我正在将数据传递到另一个视图,这很好,因为我可以使用print(image.count) 并且我得到了预期的计数。但是,我在遍历我的数组并显示图像时遇到了问题。我使用了ForEach 语句,但我收到一个错误提示我数据类型Image 必须符合Hashable(我没有使用模型/结构)

@State var image: [Image]

 ForEach(image.count, id: \.self) { image in
  Image(image)
  .resizable()
  .frame(width: getScreen().width, height: getScreen().height * 0.85)
   .aspectRatio(contentMode: .fit)
}

我什至尝试过 for 循环,即for x in images {///}

有什么办法可以解决这个问题吗?

将不胜感激!

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    您可以使用ForEach 的范围:0...10

    其次,您的image 数组已经包含Images,因此您不需要再次调用Image

    ForEach(0..<image.count) { imageIdx in
               image[imageIdx]
               .resizable()
               .frame(width: getScreen().width, height: getScreen().height * 0.85)
               .aspectRatio(contentMode: .fit)
            }
    

    现在,话虽如此,我对将Image 视图保留在数组中的想法有点怀疑。我认为你最好让你的数组充满 UIImage 对象,然后在视图中使用 Image(uiImage:) 在视图中调用它们。

    可能看起来更像这样:

    @State var images: [UIImage]
        
    var body: some View {
            ForEach(0..<images.count) { imageIdx in
               Image(uiImage: images[imageIdx])
               .resizable()
               .frame(width: getScreen().width, height: getScreen().height * 0.85)
               .aspectRatio(contentMode: .fit)
            }
    }
    

    最后,使用带有索引而不是 ID 的 ForEach可能如果您的数组使用图像更新,因为 SwiftUI 可能不知道刷新视图,因此稍后会导致有趣的问题。此时,最好为图像使用结构包装器并为它们提供真实的 ID。

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2023-01-09
      • 2020-10-27
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多