如何使用 UIActivityViewController 将 UIImage 共享到相机胶卷

Posted

技术标签:

【中文标题】如何使用 UIActivityViewController 将 UIImage 共享到相机胶卷【英文标题】:How to share UIImage to Camera Roll using UIActivityViewController 【发布时间】:2019-08-15 18:40:54 【问题描述】:

我写这段代码是为了分享 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 或子类执行任何操作,这可能会导致意外和隐蔽行为。

代码有什么问题?

【问题讨论】:

【参考方案1】:

来自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", )
        
    
)

【讨论】:

如果您无法自行解决问题,您应该发布一个针对您的新问题的新问题,并附上所有相关详细信息。

以上是关于如何使用 UIActivityViewController 将 UIImage 共享到相机胶卷的主要内容,如果未能解决你的问题,请参考以下文章

我在作为 UIDocumentInteractionController 和 UIActivityViewController 的一部分的 UIActivityGroupViewController

创建类似于新的 iOS 6 按钮共享的自定义共享视图

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]