swift - 如何使用 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 或子类执行任何操作,这可能会导致意外和隐蔽行为。
代码有什么问题?
解决方案
从文档中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", {})
}
}
})
推荐阅读
- typescript2.0 - 打字稿记录项目计数
- python - 为什么 docker-compose python 找不到气流操作员的模块
- java - 输出值总是返回不正确的东西
- firebase - 如何在 Google Cloud Run 上获取 GCP 服务帐号凭据?
- c++ - 在另一个函数中调用变量 (c++)
- javascript - 如何使用 javascript 更改背景颜色?
- php - 在 MySQL 表中排序日期(不按日期排序)
- css - 在 svg 文本的左、右、上和下用不同的颜色勾勒出轮廓
- python - 如何使用 Scrapy CsvItemExporter 将动态列导出到 CSV
- flutter - 根据 ListView 的大小将 ListView 放入/取出 Expanded