2017-10-20 56 views
3

所以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和stackoverflow,並且所有內容都指向iOS10解決方案,並且自iOS11發佈以來沒有任何內容。

我應該注意到,如果你想傳遞一個字符串,url或這些行上的東西,這個函數仍然可以正常工作。

回答

5

精簡版/ 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'中的圖像共享並在早期版本上工作,謝謝! –

相關問題