iOS11:UIActivityViewController没有成功共享的UIImage到第三方应用程序

问题描述:

所以iOS10,如果你想与UIActivityViewController分享图片,你只需要编写一个看起来像一些swift3代码:iOS11:UIActivityViewController没有成功共享的UIImage到第三方应用程序

func shareTapped() {  
     if let image = imageView.image { 
      let vc = UIActivityViewController(activityItems: [image], applicationActivities: []) 
      vc.popoverPresentationController?.barButtonItem = navigationItem.rightBarButtonItem 
      present(vc, animated: true, completion: nil) 
     } 

这种方法仍如果您想将图像保存到相机胶卷(假设您已经要求适当的权限),或者希望通过信使,空投或任何其他Apple实施方式进行共享,则该方法似乎可行。

不幸的是,如果您试图通过Twitter,Facebook,Instagram等分享图片,他们将无法成功附加图片,并且会导致错误或失败。

我花了大量时间搜索谷歌,YouTube和*,并且所有内容都指向iOS10解决方案,并且自iOS11发布以来没有任何内容。

我应该注意到,如果你想传递一个字符串,url或这些行上的东西,这个函数仍然可以正常工作。

精简版/ TLDR

通过你的图像转换成数据,然后再试图通过图像时传递一个对象到UIActivityViewController解决的Twitter/Facebook的问题:

if let jpgImage = UIImageJPEGRepresentation(image, 0.8) { 
     let vc = UIActivityViewController(activityItems: [jpgImage], applicationActivities: []) 
    } 

更长的外植体和完整的代码可以在下面找到:

更长版本

我接触到了几位专家,他们都暗示它应该可以工作,但即使在查看他们的示例应用程序时,他们也都表现出同样的问题。所以我最终认为这可能是Twitter或Facebook的问题,因为分享到苹果应用程序刚刚工作。然后我开始使用照片应用程序,并决定点击分享按钮,瞧,它与Twitter和Facebook合作!这让我想知道这是否意味着需要一些增量设置才能使其发挥作用。在尝试了很多不同的事情之后,我终于找到了一种可行的方法通过PNG或JPG将图像转换为数据,并将该新对象传递给您的activityItems解决了Twitter/Facebook问题,并且似乎仍然适用于其他所有方面。更新swift4/ios11码的图像转换成PNG看起来像:

@objc func shareTapped() { 
     if let image = imageView.image { 
      if let jpgImage = UIImageJPEGRepresentation(image, 0.8) { 
       let vc = UIActivityViewController(activityItems: [jpgImage], applicationActivities: []) 
       // add the following line if using doing universal and need iPad 
       vc.popoverPresentationController?.barButtonItem = navigationItem.rightBarButtonItem 
       present(vc, animated: true) 
      } 
     } 
    } 

希望这有助于任何其他人一直在努力,因为iOS11共享的图像。

+1

不够公平。更新为利用JPG和安全解包。 – Causaelity

+0

太棒了!拯救了我的一天!谢谢! – mikezs

+0

'UIImageJPEGRepresentation(image,0.8)'确实有助于修复'iOS 11'中的图像共享并在早期版本上工作,谢谢! –