【问题标题】:How to share UIImage to Camera Roll using UIActivityViewController如何使用 UIActivityViewController 将 UIImage 共享到相机胶卷
【发布时间】: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 或子类执行任何操作,这可能会导致意外和隐蔽行为。

代码有什么问题?

【问题讨论】:

    标签: swift uiactivityviewcontroller phphotolibrary


    【解决方案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", {})
            }
        }
    })
    
    

    【讨论】:

    • 如果您无法自行解决问题,您应该发布一个针对您的新问题的新问题,并附上所有相关详细信息。
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2022-01-01
    相关资源
    最近更新 更多