使用DispatchQueue在SwiftUI中异步加载图像

时间:2019-10-28 12:52:09

标签: image asynchronous swiftui

我创建了带有三个导航链接的主视图。单击一下,将显示一个视图,其中包含从AWS S3提取的180张图像的列表。在滚动过程中,该视图处于挂接状态。因此,图像应在后台异步加载。我已经实现了降采样功能,以减少内存占用。我遵循了WWDC 2018的演讲,该演讲解释了如何使用DispatchQueue实现异步加载。但是我不起作用。 顺便说一句,我是SwiftUI和Swift的新手。

我试图像WWDC演讲中的此屏幕截图一样实现它。我的实现在下面的代码片段中进行了注释。 Screenshot 我也尝试使用Combine框架,但没有找到解决我问题的方法。 大多数网站都介绍了如何在Swift中使用DispatchQueue,但在SwiftUI中却没有,这使我很难从哪里开始。

var body: some View {
        List {
            ForEach(range.count, id: \.self) { item in
                NavigationLink(destination: ImageLargeView()) {
                    //DispatchQueue.main.async {
                    Image(uiImage: downsample(thisReturnesAllDownsampledImagesAsUIImage))
                    //}
                }
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 200, alignment: .center)
                .clipped()
            }
        }
}

我的目标是以最少的内存占用空间摆脱连接问题。

1 个答案:

答案 0 :(得分:2)

看看一些有关SwiftUI中异步图像加载的博客文章。例如This one看起来像它描述了您需要完美使用的技术。

简而言之:将自定义视图放入处理后台线程的层次结构中,然后在下载视图后更新图像。

也有可可足类,例如this one