首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI -显示图像数组

SwiftUI -显示图像数组
EN

Stack Overflow用户
提问于 2021-02-22 20:33:27
回答 1查看 2.9K关注 0票数 0

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

代码语言:javascript
复制
@State private var image: [Image] = []
@State var imageData : Data = .init(count: 0)

并附加如下数据:

代码语言:javascript
复制
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 (我没有使用模型/结构)

代码语言:javascript
复制
@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 {///}

我是否可以解决这个问题呢?

会很感激的!

EN

回答 1

Stack Overflow用户

发布于 2021-02-22 20:38:28

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

其次,image数组已经保存了Image,因此不需要再次调用Image

代码语言:javascript
复制
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:)

看起来可能更像这样:

代码语言:javascript
复制
@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)
        }
}

最后,如果您的数组使用图像更新(因为ForEach可能不知道刷新视图),那么使用索引而不是ID使用ForEach可能会导致一些有趣的问题。此时,最好对图像使用struct包装器,并为它们提供真正的ID。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66323020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档