【Swift 3】フォトライブラリ or カメラから写真を読み込む

【Swift 3】フォトライブラリ or カメラから写真を読み込む

フォトライブラリから画像を取得する方法です。カメラで撮影した写真の取得もほとんど同じなのでセットで説明します

info.plistにプライバシーの情報を追加

フォトライブラリを使うときは
Privacy – Photo Library Usage Description(NSPhotoLibraryUsageDescription)

カメラを使うときは
Privacy – Camera Usage Description(NSCameraUsageDescription)

を追加して利用目的を書きます
これを入れないでフォトライブリやカメラを起動しようとするとアプリがストンと落ちます

フォトライブラリの画像を取得

iPadだとポップオーバーで表示するようにしています

if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) {

    let picker = UIImagePickerController()
    picker.modalPresentationStyle = UIModalPresentationStyle.popover
    picker.delegate = self // UINavigationControllerDelegate と UIImagePickerControllerDelegateを実装する
    picker.sourceType = UIImagePickerControllerSourceType.photoLibrary

    if let popover = picker.popoverPresentationController {
        popover.sourceView = self.view
        popover.sourceRect = loadImageButton.frame // ポップオーバーの表示元となるエリア
        popover.permittedArrowDirections = UIPopoverArrowDirection.any
    }
    self.present(picker, animated: true, completion: nil)
}

カメラで撮影した画像を取得

カメラの場合は、iPadでもフルスクリーン表示にします

if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {

    let picker = UIImagePickerController()
    picker.modalPresentationStyle = UIModalPresentationStyle.fullScreen
    picker.delegate = self // UINavigationControllerDelegate と UIImagePickerControllerDelegateを実装する
    picker.sourceType = UIImagePickerControllerSourceType.camera

    self.present(picker, animated: true, completion: nil)
}

画像の取得完了処理

フォトライブラリから読み込んだ画像と、カメラで撮影した画像を受け取る共通のメソッド
UIImagePickerControllerDelegateで定義されているメソッドです

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

        // pickedImageが読み込まれた画像なので、あとはお好きに
    }
    picker.dismiss(animated: true, completion: nil)
}

すごく簡単ですね

タイトルとURLをコピーしました