xyk blog

最近は iOS 開発の記事が多めです。

Swift で UIImagePickerController を使って写真を読み込む

検証環境:
Xcode 11.4
Swift 5.2

Swift で UIImagePickerController を使って写真を読み込むための最小コードサンプルです。

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func handleButton(_ sender: UIButton) {
        
        guard UIImagePickerController.isSourceTypeAvailable(.photoLibrary) else {
            return
        }
        
        let picker = UIImagePickerController()
        picker.sourceType = .photoLibrary // 他に .camera, .savedPhotosAlbum がある
        picker.delegate = self
        //picker.allowsEditing = true // 写真選択後に正方形にクロップする編集画面に遷移するか
        present(picker, animated: true)
    }
}

extension ViewController: UIImagePickerControllerDelegate & UINavigationControllerDelegate {
    
    func imagePickerController(_ picker: UIImagePickerController,
                               didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
        print("didFinishPickingMediaWithInfo. ", info)
        
        picker.dismiss(animated: true) {
            if let image = info[.originalImage] as? UIImage {
                // do stuff
            }
        }
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        print("imagePickerControllerDidCancel.")
        picker.dismiss(animated: true)
    }
}

Info.plist への権限追加については、UIImagePickerController によるフォトライブラリからの読み込みのみの場合は特に不要なようです。

Note
When using the UIImagePickerController to bring up the user's photo library, your app doesn't need to request permission explicitly.

https://developer.apple.com/documentation/photokit/requesting_authorization_to_access_photos