Swift で UIActivityViewController を利用してfacebookやTwitterにシェアをする

Safari などでシェアボタンを押すとTwitter や Facebook へのシェアができるようになっています。これを実装したいと思って調べました。
※ ちなみに、Storyboardを使っています

![share.gif](https://qiita-image-store.s3.amazonaws.com/0/21321/e25f677b-ef5c-61de-0d43-11b0c49c5c3c.gif)

# UIActivityViewController を利用する

アプリケーションからTwitter などのシェアボタン（って言うのかわからないですが…）を呼び出す場合は、UIActivityViewController を利用します

## UIButton で呼び出す

UIbutton（ここでは ButtonShare ）にaddTarget で、function を呼び出します。

```swift
ButtonShare.addTarget(self, action: "share_action:", forControlEvents: .TouchUpInside)
```

## UILongPressGestureRecognizer で呼び出す

画像を長押しのときも、呼び出したいです。

```swift
// 長押し
var myLongPressGesture = UILongPressGestureRecognizer(target: self, action: "lognPress:")

// 長押し - 2.0秒
myLongPressGesture.minimumPressDuration = 2.0
// 長押し - 許容範囲15px
myLongPressGesture.allowableMovement = 150

// 画像に長押しがあったときの対応
SampleImage.userInteractionEnabled = true
SampleImage.addGestureRecognizer(myLongPressGesture)
```

## ツィートした結果

<blockquote class="twitter-tweet" lang="en"><p>iOSからのテストです <a href="https://twitter.com/hashtag/cat?src=hash">#cat</a> <a href="https://twitter.com/hashtag/%E7%8C%AB?src=hash">#猫</a> <a href="https://twitter.com/hashtag/%E3%83%8D%E3%82%B3?src=hash">#ネコ</a> <a href="http://t.co/AkPjKNdlkO">pic.twitter.com/AkPjKNdlkO</a></p>&mdash; まつたろう (@kamonegi1977) <a href="https://twitter.com/kamonegi1977/status/587246664626212864">April 12, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

* https://twitter.com/kamonegi1977/status/587246664626212864

## ソース（Swift）

Social を import するのを忘れずに。

```swift
import UIKit
import Social

class DetailViewController: UIViewController {

    @IBOutlet weak var detailDescriptionLabel: UILabel!
    @IBOutlet weak var ButtonShare: UIButton!
    @IBOutlet weak var SampleImage: UIImageView!

    func configureView() {
        if let detail: AnyObject = self.detailItem {
            if let label = self.detailDescriptionLabel {
                label.text = detail.description
            }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.configureView()
       
        // 長押し
        var myLongPressGesture = UILongPressGestureRecognizer(target: self, action: "lognPress:")

        // 長押し - 2.0秒
        myLongPressGesture.minimumPressDuration = 2.0
 
        // 長押し - 許容範囲15px
        myLongPressGesture.allowableMovement = 150

        // 画像に長押しがあったときの対応
        SampleImage.userInteractionEnabled = true
        SampleImage.addGestureRecognizer(myLongPressGesture)
       
        // share
        ButtonShare.addTarget(self, action: "share_action:", forControlEvents: .TouchUpInside)
    }

    func lognPress(sender: UILongPressGestureRecognizer) {
        println("lognPress")
        share_action(self)
    }
   
    func share_action(sender: AnyObject) {
        println("share_action")
     
        let secondActivityItem = "iOSからのテストです #桜"
        let firstActivityItem:UIImage = SampleImage.image! as UIImage
       
        let activityViewController = UIActivityViewController(
            activityItems: [firstActivityItem, secondActivityItem],
            applicationActivities: nil)
       

        activityViewController.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:Array!, error:NSError!) in
            if (completed) {
                // ここに完了後の処理を書く
                println("完了！")
            }
        }

        self.presentViewController(activityViewController, animated: true, completion: nil)
    }
```

# 実行環境

* Xcode 6.0
* iOS 8