UIActivityとは
UIActivityは、画面下からModal(CoverVertical)で出現する、FacebookやTwitterなどのSNS共有やメール添付の機能をアイコン一覧で表示するActivityである。任意の機能やアイコンを追加する場合は、UIActivityを継承したクラスを作成する必要がある。

カスタムUIActivityの作成
UIActivityを継承したクラスには、「表示するタイトル」や「アイコンイメージ」、「ボタンを押したときの動作」などを記述する。下の例は、「Safariで開く」というアイコンと機能をUIActivityに追加した場合のコードである。
import UIKit
class SafariActivity: UIActivity {
var url: NSURL? = nil
// 表示するタイトル
override func activityTitle() -> String? {
return "Safariで開く"
}
// 表示するアイコン
override func activityImage() -> UIImage? {
return nil
}
// どのようなアイテムが投入された場合に機能が働くかを定義する
// 機能が動作する条件の場合には true を返す
override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
for activityItem in activityItems {
// NSURLかつURLを開くことが出来る場合は動作する
if activityItem.isKindOfClass(NSURL) && UIApplication.sharedApplication().canOpenURL(activityItem as! NSURL) {
return true
}
}
return false
}
// 機能が動作する直前の処理を記す
override func prepareWithActivityItems(activityItems: [AnyObject]) {
for activityItem in activityItems {
if activityItem.isKindOfClass(NSURL){
url = activityItem as? NSURL
}
}
}
// 機能のふるまいを記述する
override func performActivity() {
// SafariでURLを開く
UIApplication.sharedApplication().openURL(url!)
self.activityDidFinish(true)
}
}
上記機能を含んだUIActivityを表示するには、以下のように定義したクラスを呼び出す。
// Data Item let items = [NSURL(string: webView.URL!.description)!] // Application Activity let activities = [SafariActivity()] // 上記2つを引数に指定しUIActivityViewControllerを生成 let activityController :UIActivityViewController = UIActivityViewController(activityItems: items, applicationActivities: activities) UIActivityViewControllerを表示 self.presentViewController(activityController, animated: true, completion: nil)
以上でカスタムのUIActivityを表示することが可能となった。