UIActivityViewController 在共享我编辑的 UIImage 时崩溃,但适用于 UIImage(named:)

Posted

技术标签:

【中文标题】UIActivityViewController 在共享我编辑的 UIImage 时崩溃,但适用于 UIImage(named:)【英文标题】:UIActivityViewController crashes when sharing an UIImage I edited, but works with UIImage(named:) 【发布时间】:2018-09-04 16:59:41 【问题描述】:

我正在使用以下代码将两个图像合并为一个

func combineImages() 

    //reset tent image
    self.tempImageView.image = self.selectedTent

    let size = CGSize(width: self.tempImageView.image!.size.width, height: self.tentImageView.image!.size.height)
    UIGraphicsBeginImageContext(size)

    let areaSize = CGRect(x: 0, y: 0, width: size.width, height: size.height)
    if let selected = self.selectedBackground 
        selected.scaleImageToSize(newSize: CGSize(width: areaSize.width, height: areaSize.height)).draw(in: areaSize)
    

    self.tempImageView.image!.draw(in: areaSize, blendMode: CGBlendMode.normal, alpha: 0.8)

    self.combinedImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    self.tempImageView.image = combinedImage

如果我尝试使用 UIAcitivityViewController 共享此组合图像,则会弹出共享表,但是当我选择一个应用程序(例如 Slack)时,图像预览需要一段时间才能加载,图像不会显示在预览中,几秒钟后,共享弹出窗口就会关闭。这是我用来分享的代码

if let imageToShare = self.combinedImage 

        let imageToShareArray = [ imageToShare ]
        let activityViewController = UIActivityViewController(activityItems: imageToShareArray, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = view

        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)
    

如果我使用 UIImage(named:) 而不是使用组合图像对象创建图像,则一切正常,我可以分享。

当我使用我想要的图像时,我也在 XCode 的输出窗口中看到了这个错误

2018-09-04 10:45:28.219428-0600 MyApp[7393:4245932] [Common] _BSMachError: port 13817; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

先尝试将新图像转换为数据:

if let imageToShare = self.combinedImage, let dataImage = UIImageJPEGRepresentation(imageToShare, 0.8) 

   let imageToShareArray = [dataImage]
   let activityViewController = UIActivityViewController(activityItems: imageToShareArray, applicationActivities: nil)
   activityViewController.popoverPresentationController?.sourceView = view

   // present the view controller
   self.present(activityViewController, animated: true, completion: nil)

【讨论】:

这非常有效。我仍然想了解为什么我的组合 UIImage 没有工作,而未经编辑的 UIImage 工作以及从资产创建的 UIImages 以及这个不直观的错误必须做什么,如果有人知道的话。但是谢谢你的回答,凯文。 @Rod UIGraphicsGetImageFromCurrentImageContext 根据当前基于位图的图形上下文的内容创建图像。换句话说,位图图像。 UIActivityViewController 不适用于该格式。这就是为什么您需要将图像转换为 JPEG 或 PNG 格式的数据。 感谢凯文的解释。我现在可以睡得更好了 :) 像这样的东西让我发疯,我在文档中找不到它。

以上是关于UIActivityViewController 在共享我编辑的 UIImage 时崩溃,但适用于 UIImage(named:)的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityViewController 背景颜色

UIActivityViewController 共享 UIActivity 未显示

UIActivityViewController 不适用于 WKWebView

限制 UIActivityViewController 共享扩展活动

尝试呈现 UIActivityViewController 时崩溃

更改 UIActivityViewController 的 navigationBar 的颜色