首页 > 解决方案 > 如何使用 UIActivityViewController 将 UIImage 共享到相机胶卷

问题描述

我写了这段代码来分享 UIImage

guard let codeImage = imgQRCode.image else {
        return
    }
    PHPhotoLibrary.requestAuthorization({status in
        if status == .authorized {
            let ac = UIActivityViewController(activityItems: [codeImage], applicationActivities: nil)
            self.present(ac, animated: true, completion: nil)
        } else {
            self.showOkAlert(messageTitle: "Access not granted", messageText: "Code image not saved.", okText: "OK", {})
        }
    })
}

已授予对照片库的访问权限,但应用程序崩溃并在日志中显示此报告:

2019-08-15 20:25:01.395163+0200 ContactQR[1689:281884] [Animation] +[UIView setAnimationsEnabled:] 从后台线程调用。不支持从后台线程对 UIView 或子类执行任何操作,这可能会导致意外和隐蔽行为。

代码有什么问题?

标签: swiftuiactivityviewcontrollerphphotolibrary

解决方案


从文档中PHPhotoLibrary requestAuthorization

照片可能会在任意串行队列上调用您的处理程序块。如果您的处理程序需要与用户界面元素交互,请将此类工作分派到主队列。

所以你需要添加使用DispatchQueue.main.async

PHPhotoLibrary.requestAuthorization({status in
    DispatchQueue.main.async {
        if status == .authorized {
            let ac = UIActivityViewController(activityItems: [codeImage], applicationActivities: nil)
            self.present(ac, animated: true, completion: nil)
        } else {
            self.showOkAlert(messageTitle: "Access not granted", messageText: "Code image not saved.", okText: "OK", {})
        }
    }
})


推荐阅读