我需要将捆绑包中的约200张图像加载到内存中的数组中,如下所示:let arr = (0..<200).map({UIImage(named: "\($0).png")})
唯一的问题是它需要花很长时间才能完成..因此,我想在后台执行此操作,并在作业完成时获取回调。
我想我可以这样做:var arr = []DispatchQueue.main.async({ arr = (0..<200).map({UIImage(named: "\($0).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: "\($0).png") })
callback(array)
}
}
可以这样使用(使用快速尾随闭包语法):
loadImages { images in
// do something with the images
}
您可能必须将
callback(array)
分派回DispatchQueue.main
。关于ios - 在iOS上将本地镜像异步加载到数组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43131304/