フォトライブラリから画像を取得する方法です。カメラで撮影した写真の取得もほとんど同じなのでセットで説明します
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) }
すごく簡単ですね