とりいそぎ、Photo Library から画像を選択する方法をメモ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import UIKit // delegate は UIImagePickerControllerDelegate, UINavigationControllerDelegate の両方必要 class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func buttonClicked(_ sender: Any) { let pickerController = UIImagePickerController() //PhotoLibraryから画像を選択 pickerController.sourceType = UIImagePickerController.SourceType.photoLibrary //デリゲートを設定する pickerController.delegate = self //ピッカーを表示する present(pickerController, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // モーダルビュー(つまり、イメージピッカー)を閉じる dismiss(animated: true, completion: nil) if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { //ボタンの背景に選択した画像を設定 imageView.image = image } else{ print("Error") } } //画像選択がキャンセルされた時に呼ばれる. func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { // モーダルビューを閉じる dismiss(animated: true, completion: nil) } } |
一番肝心なのは、Delegateの設定。UIImagePickerControllerDelegateだけでなく、UINavigationControllerDelegateにも準拠する必要がある。両方を設定しておかないとdelegateの指定のときにキャストがかかってしまう。
あと、plist に以下の設定を行い、使用理由を追加しておく必要もあり。
1 |
Privacy - Photo Library Additions Usage Description |