在 iOS 上将本地图像异步加载到数组中
Load local images into an array asynchronously on iOS
我需要将我的包中的大约 200 张图像加载到内存中的数组中,如下所示:
let arr = (0..<200).map({UIImage(named: "\([=12=]).png")})
唯一的问题是它需要永远做..所以我想在后台做并在工作完成时得到回调..
我想我可以这样做:
var arr = []
DispatchQueue.main.async({
arr = (0..<200).map({UIImage(named: "\([=13=]).png")})
})
但是我怎么知道块何时完成?谢谢!
编辑:我需要将这些加载到内存中,因为我想为 UIImageView
中的一系列图像制作动画,如下所示:
let img: UIImageView()
img.animationImages = arr
img.duration = 1
img.startAnimating()
您可以创建回调并在后台线程加载图像后调用它,因为图像将在那里同步加载。
我建议这样做:
func loadImages(callback: @escaping ([UIImage]) -> Void) {
DispatchQueue.global(qos: .background).async {
let array = (0..<200).flatMap({ UIImage(named: "\([=10=]).png") })
callback(array)
}
}
可以这样使用(使用swift尾随闭包语法):
loadImages { images in
// do something with the images
}
您可能需要将 callback(array)
发送回 DispatchQueue.main
。
我需要将我的包中的大约 200 张图像加载到内存中的数组中,如下所示:
let arr = (0..<200).map({UIImage(named: "\([=12=]).png")})
唯一的问题是它需要永远做..所以我想在后台做并在工作完成时得到回调..
我想我可以这样做:
var arr = []
DispatchQueue.main.async({
arr = (0..<200).map({UIImage(named: "\([=13=]).png")})
})
但是我怎么知道块何时完成?谢谢!
编辑:我需要将这些加载到内存中,因为我想为 UIImageView
中的一系列图像制作动画,如下所示:
let img: UIImageView()
img.animationImages = arr
img.duration = 1
img.startAnimating()
您可以创建回调并在后台线程加载图像后调用它,因为图像将在那里同步加载。
我建议这样做:
func loadImages(callback: @escaping ([UIImage]) -> Void) {
DispatchQueue.global(qos: .background).async {
let array = (0..<200).flatMap({ UIImage(named: "\([=10=]).png") })
callback(array)
}
}
可以这样使用(使用swift尾随闭包语法):
loadImages { images in
// do something with the images
}
您可能需要将 callback(array)
发送回 DispatchQueue.main
。