Swift UIActivityViewControllerで簡単にSNSシェアを実装

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

よくあるこの画面。UIActivityViewControllerを使用すると簡単に実装できる。

f:id:letitride:20190807130442p:plain:h400

シェア画面の起動

UIActivityViewControllerのactivityItemsに各SNSに渡したいオブジェクトをセットすればよい。String、UIImage、URLなどがある。尚、Facebookはテキストのセットは受け付けなかった。

@IBAction func share(_ sender: Any) {
    let activityViewController = UIActivityViewController(activityItems: ["メッセージを入力してください",UIImage(name:"画像ファイル名")], applicationActivities: nil)
    self.present(activityViewController, animated: true, completion: nil)
}
画像が添付できない場合

Twitter、Facebookに画像を添付しようとすると以下のようなエラーが出る場合がある。

Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}

添付しようとしている画像のサイズが大きすぎてアップロードに失敗しているようなので、サイズダウンしてみたところ正常に添付できた。

付録. UIImageのサイズをダウンする

例では元の画像の1/3にした。

func DownSize(_ image:UIImage)->UIImage{
    //縦、横を元画像の1/3にする
    let resizedSize = CGSize(width: image.size.width / 3, height: image.size.height / 3)
    //WithOptionsのほうが画像が荒くなりにくい。らしい。
    UIGraphicsBeginImageContextWithOptions(resizedSize, false, 0.0)
    image.draw(in: CGRect(x: 0, y: 0, width: resizedSize.width, height: resizedSize.height))
    let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return resizedImage!
}