[Swift]UIActivityの使い方まとめ

  • 166
    Like
  • 0
    Comment
More than 1 year has passed since last update.

開発中のアプリで、シェアボタンを押したら下からピロッと出てくる機能を実装したかったものの、名称がわからずだいぶさまよい歩きました。無知とは辛いものです。
そんな過去の自分に捧げたいメモ書きを残します。

サンプルリポジトリ - https://github.com/nashirox/uiactivity-sample

UIActivityとは?

SNSへの投稿やメール送信から、画像保存に連絡先追加などの機能を一覧から選択できる機能です。

image

使用できるサービスの種類

UIActivityでは次のサービスを設定することができます。

タイプ名 概要
UIActivityTypePostToFacebook Facebookへ投稿
UIActivityTypePostToTwitter Twitterへ投稿
UIActivityTypeMessage メッセージを送信
UIActivityTypeMail メールを送信
UIActivityTypePrint プリントダイアログを立ち上げる
UIActivityTypeCopyToPasteboard クリックボードに貼り付け
UIActivityTypeAssignToContact 連絡先を呼び出す
UIActivityTypeSaveToCameraRoll カメラロールに保存
UIActivityTypeAddToReadingList Safariのリーディングリストに追加
UIActivityTypePostToFlickr Flickrへ投稿
UIActivityTypePostToVimeo Vimeoへ投稿
UIActivityTypePostToWeibo 新浪微博へ投稿
UIActivityTypePostToTencentWeibo 騰訊微博へ投稿
UIActivityTypeAirDrop AirDropでの共有

実装方法

ストーリーボード

新規プロジェクトで、真ん中にシェア用ボタンを配置します。

スクリーンショット 2015-03-20 13.52.58.png

Action接続、UIButtonタイプでshareという名前でViewControllerに紐付けます。

スクリーンショット 2015-03-20 14.06.21.png

コード

Accountsフレームワークを最初にインポートしてください。あとは次のような感じです。

ViewController.swift
import UIKit
import Accounts

class ViewController: UIViewController {

  @IBAction func share(sender: UIButton) {

    // 共有する項目
    let shareText = "Apple - Apple Watch"
    let shareWebsite = NSURL(string: "https://www.apple.com/jp/watch/")!
    let shareImage = UIImage(named: "shareSample.png")!

    let activityItems = [shareText, shareWebsite, shareImage]

    // 初期化処理
    let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)

    // 使用しないアクティビティタイプ
    let excludedActivityTypes = [
      UIActivityTypePostToFacebook,
      UIActivityTypePostToTwitter,
      UIActivityTypeMessage,
      UIActivityTypeSaveToCameraRoll,
      UIActivityTypePrint
    ]

    activityVC.excludedActivityTypes = excludedActivityTypes

    // UIActivityViewControllerを表示
    self.presentViewController(activityVC, animated: true, completion: nil)
  }

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }
}  

実行結果

テキストやイメージファイル、URLの組み合わせで立ち上がるダイアログもちょっとかわるので、参考までにスクショをのせておきます。

タイプ名 text + URL + image text + URL
基本表示 withimage.png 写真 2015-03-20 20 42 04.png
Twitter twitter2
Facebook facebook1 facebook2
メール 写真_2015-03-20_14_27_16.png mail.png
メッセージ imessage message.png
Flickr flickr 非表示

その他

英語になってる場合

Project -> LocalizationsにJapanes (ja)を追加してください。

設定

LINEを追加する

Cocoapod でLineActivityをインストールしてください。

pod "LINEActivity", "~> 0.2.0"

pod install後、ブリッジングヘッダに追記します。

yourAppName-Bridging-Header.h
#import "LINEActivity.h"

あとは、先のUIActivityViewControllerの引数 applicationActivitiesに配列で追加するだけです。

ViewController.swift
let LineKit = LINEActivity()
let myApplicationActivities = [LineKit]

// 標準以外のサービスも追加
let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: myApplicationActivities)

これで追加されました。モノクロなのは仕様なので、カラーにしたい場合はQiitaのこの投稿を参考にしてください。

line.png