swift - 如何使用 UIActivityViewController 将 UIImage 分享到相机胶卷

标签 swift uiactivityviewcontroller phphotolibrary

我写这段代码是为了分享 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:] being called from a background thread. Performing any operation from a background thread on UIView or a subclass is not supported and may result in unexpected and insidious behavior.

代码有什么问题?

最佳答案

来自 PHPhotoLibrary requestAuthorization 的文档:

Photos may call your handler block on an arbitrary serial queue. If your handler needs to interact with user interface elements, dispatch such work to the main queue.

所以需要添加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", {})
        }
    }
})

关于swift - 如何使用 UIActivityViewController 将 UIImage 分享到相机胶卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514575/

相关文章:

ios - 如何从 Firebase 检索子值,然后使用该值刷新 View

ios - 如何以编程方式与 UINavigationController 默认集成的 UIToolbar 进行交互?

ios - Swift UIActivityViewController Image&Url Share 不适用于 FB

ios - 将其他相机拍摄的 DNG(原始照片)保存到 iOS 照片库

ios - 使用照片框架从照片库中删除照片

ios - 使用 Swift 包管理器添加依赖项

swift - 尝试创建带有标签的 ScrollView

ios - UIActivityViewController 允许我最多分享 5 个条目到相机胶卷

ios - 从其他 ViewController 呈现 ViewController 时是否需要调用 DispatchQueue

ios - 应用程序的 Info.plist 必须包含一个 NSPhotoLibraryUsageDescription 键和一个字符串值,向用户解释应用程序如何使用此数据