提问人:zhouxinle 提问时间:1/6/2022 更新时间:1/6/2022 访问量:607
iOS - 如何同时显示多网络图像?
iOS - how to show multi network images at the same time?
问:
在我的 UIView 上,我有 3 个 UIImageView 来加载 3 个图像的 url。众所周知,3 个 UIImageView 加载图片是有时间差的,但是我有一个要求:3 张图片全部下载完后,那么 3 个 UIImageView 同时显示这 3 张图片,怎么办?
答:
1赞
Lobont Andrei
1/6/2022
#1
因此,如果我理解正确,您想先下载所有 3 张图像,然后才显示它们?如果是这样,我建议使用 DispatchGroup。
let images: [URL] = []
let dispatchGroup = DispatchGroup()
for image in images {
dispatchGroup.enter()
URLSession.shared.dataTask(with: image) { (data, response, error) in
// save image data somewhere
dispatchGroup.leave()
}.resume()
}
dispatchGroup.notify(queue: .main) {
// display images on the image view
}
基本上,每当开始下载时,您都会输入调度组,下载完成后,您离开它。每次操作离开组后,您都会使用通知完成并显示所需的内容。
评论
0赞
zhouxinle
1/6/2022
你的意思是第一步下载3张图片,下载后,显示?
0赞
Lobont Andrei
1/6/2022
如果您希望同时显示所有 3 张图像,您需要先下载它们,因为正如您所说,它们之间的下载时间可能存在差异。
0赞
zhouxinle
1/6/2022
顺便问一下,你知道在 Flutter 中怎么做吗?
0赞
Lobont Andrei
1/6/2022
很抱歉,不,对不起。
1赞
Ramy Rizkalla
1/6/2022
#2
如果您拥有 iOS 13 的最低支持版本并使用 Xcode 13.2,则可以使用 和 来实现此目的:async
await
func loadImages() {
Task {
async let firstImage = loadImage(index: 1)
async let secondImage = loadImage(index: 2)
async let thirdImage = loadImage(index: 3)
let images = await [firstImage, secondImage, thirdImage]
}
}
func loadImage(index: Int) async -> UIImage {
let imageURL = URL(string: urlPathString)!
let request = URLRequest(url: imageURL)
let (data, _) = try! await URLSession.shared.data(for: request, delegate: nil)
print("Finished loading image \(index)")
return UIImage(data: data)!
}
评论