首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待两个独立的UIGraphicsImageRenderer任务完成

如何等待两个独立的UIGraphicsImageRenderer任务完成
EN

Stack Overflow用户
提问于 2022-01-25 13:52:32
回答 1查看 158关注 0票数 0

我有两个带有不同呈现器的UIGraphicsImageRenderer任务,当我运行这个任务时,由于它是同步的,所以只返回一个任务,如何等待两个任务都创建了映像后才返回它们?

代码语言:javascript
复制
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)
    
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-25 14:17:30

测试您的代码

代码语言:javascript
复制
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)
}

获取

代码语言:javascript
复制
1: true
2: true
3: true
4: true

这意味着不存在异步部分,所有代码都是同步的和串行的,不需要等待。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70849813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档