UIActivityの使い方

UIActivityとは

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

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を表示することが可能となった。