我有两个带有不同呈现器的UIGraphicsImageRenderer任务,当我运行这个任务时,由于它是同步的,所以只返回一个任务,如何等待两个任务都创建了映像后才返回它们?
func createShareImage(callback: @escaping (_ image: UIImage, _ bgImage: UIImage) -> Void) {
let canvas = UIView()
...
let format = UIGraphicsImageRendererFormat()
format.scale = UIScreen.main.scale
let renderer = UIGraphicsImageRenderer(size: canvas.bounds.size, format: format)
let stickerImage = renderer.image { _ in
canvas.drawHierarchy(in: canvas.bounds, afterScreenUpdates: true)
}
let bgImageView = UIView()
...
let bgRenderer = UIGraphicsImageRenderer(size: bgImageView.bounds.size, format: format)
let bgImage = bgRenderer.image { _ in
bgImageView.drawHierarchy(in: bgImageView.bounds, afterScreenUpdates: true)
}
callback(stickerImage, bgImage)
}发布于 2022-01-25 14:17:30
测试您的代码
func createShareImage(callback: @escaping (_ image: UIImage, _ bgImage: UIImage) -> Void) {
let canvas = UIView(frame: CGRect.init(x: 0, y: 0, width: 200, height: 200))
canvas.backgroundColor = .red
let format = UIGraphicsImageRendererFormat()
format.scale = UIScreen.main.scale
print("1:",Thread.isMainThread)
let renderer = UIGraphicsImageRenderer(size: canvas.bounds.size, format: format)
let stickerImage = renderer.image { _ in
canvas.drawHierarchy(in: canvas.bounds, afterScreenUpdates: true)
print("2:",Thread.isMainThread)
}
let bgImageView = UIView(frame: CGRect.init(x: 0, y: 0, width: 2000, height: 2000))
bgImageView.backgroundColor = .green
let bgRenderer = UIGraphicsImageRenderer(size: bgImageView.bounds.size, format: format)
let bgImage = bgRenderer.image { _ in
bgImageView.drawHierarchy(in: bgImageView.bounds, afterScreenUpdates: true)
print("3:",Thread.isMainThread)
}
print("4:",Thread.isMainThread)
callback(stickerImage, bgImage)
}获取
1: true
2: true
3: true
4: true这意味着不存在异步部分,所有代码都是同步的和串行的,不需要等待。
https://stackoverflow.com/questions/70849813
复制相似问题