1. ホーム
  2. ios

[解決済み] SwiftでUIActivityViewControllerを使用してテキストや画像を共有する基本的な例

2022-05-03 03:14:27

質問

iOSで他のアプリと共有する方法を知りたいと思い、検索を始めました。その結果、2つの重要な方法があることがわかりました。

  • UIActivityViewController
  • UIDocumentInteractionController

これらの方法とその他の方法を比較すると 今回のSO回答 .

新しいコンセプトを学ぶとき、手始めに基本的な例を見るのが好きなことがよくあります。一度、基本的なセットアップができれば、後で好きなように修正することができます。

に関連したSOの質問が多くあります。 UIActivityViewController しかし、簡単な例を教えてくださいというものは見つかりませんでした。私はこの方法を学んだばかりなので、以下に私自身の回答を記載します。より良いもの(またはObjective-Cバージョン)を追加するのは自由です。

どのように解決するのですか?

UIActivityViewControllerのサンプルプロジェクト

ストーリーボードに2つのボタンを設定し、それらをビューコントローラーに接続します (以下のコードを参照)。

Assets.xcassetsに画像を追加します。私は"lion"と名付けました。

コード

import UIKit
class ViewController: UIViewController {
    
    // share text
    @IBAction func shareTextButton(_ sender: UIButton) {
        
        // text to share
        let text = "This is some text that I want to share."
        
        // set up activity view controller
        let textToShare = [ text ]
        let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
        
        // exclude some activity types from the list (optional)
        activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]
        
        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)
        
    }
    
    // share image
    @IBAction func shareImageButton(_ sender: UIButton) {
        
        // image to share
        let image = UIImage(named: "Image")
        
        // set up activity view controller
        let imageToShare = [ image! ]
        let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
        
        // exclude some activity types from the list (optional)
        activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ]
        
        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)
    }
    
}

結果

テキストを共有する」をクリックすると左側に、「画像を共有する」をクリックすると右側に結果が表示されます。

注意事項

  • iOS 11とSwift 4で再テストしてみました。シミュレーターで数回実行しないと、タイムアウトしてしまうので、うまくいきませんでした。これは、私のコンピュータが遅いからかもしれません。
  • これらの選択肢のいくつかを非表示にしたい場合は excludedActivityTypes 上のコードに示すように
  • を含めない。 popoverPresentationController?.sourceView の行は、iPad上でアプリを実行したときにクラッシュする原因となります。
  • このため、他のアプリにテキストや画像を共有することはできません。おそらく UIDocumentInteractionController を使用します。

こちらもご覧ください