iPadとPlaygroundsで学ぶ:アルバム内の写真を読み出す
以前試した、内蔵カメラでの写真撮影と同じ手順でアルバムから写真を取り出すことができます。
手順
カメラと同様にUIImagePickerControllerを使います。 異なるのはsourceTypeの指定だけです。
- UIImagePickerControllerのインスタンスを生成する
- 生成したインスタンスのsourceTypeにUIImagePickerController.SourceType. photoLibraryを設定する
- プロトコルを登録する
- presentで生成したインスタンスへ画面遷移する
撮影結果の受け取りもカメラ使用時と同様にプロトコルで受け取ります。
簡単ですね。
アプリの仕様
ビューにボタンを配置しボタンが押されたときにシステムアルバムアプリを起動します。 画像を選択しキャンセルされなかった場合には画面をアルバムに保存します。 (同じ絵が増えます)
コード
以下コードです。
import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { var imagePicker: UIImagePickerController? var mainView: UIView? var button: UIButton? override func viewDidLoad() { createElements() setAnchorConstraint() } func createElements() { self.imagePicker = UIImagePickerController() self.mainView = UIView() self.button = UIButton() guard let mainView = self.mainView, let button = self.button else { return } button.backgroundColor = UIColor.magenta button.addTarget(self, action:#selector(self.buttonEvent(_:)), for: UIButton.Event.touchUpInside) mainView.addSubview(button) self.view = mainView } func setAnchorConstraint() { guard let mainView = self.view, let button = self.button else { return } button.translatesAutoresizingMaskIntoConstraints = false button.centerXAnchor.constraint(equalTo:mainView.centerXAnchor).isActive = true button.bottomAnchor.constraint(equalTo:mainView.bottomAnchor, constant: -100).isActive = true button.widthAnchor.constraint(equalToConstant:60).isActive = true button.heightAnchor.constraint(equalToConstant:30).isActive = true } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // 画像データを取り出す if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { // アルバムへ保存 UIImageWriteToSavedPhotosAlbum(image,self,#selector(self.imageSavingEvent(_:didFinishSavingWithError:contextInfo:)), nil) } // 遷移元へ戻る picker.dismiss(animated:true, completion:nil) } // カメラを起動するボタンのイベント @objc func buttonEvent(_ sender: UIButton) { guard let imagePicker = self.imagePicker else { return } // UIImagePickerControllerの設定 imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary // protocolを設定 imagePicker.delegate = self // 画面遷移 present(imagePicker, animated:true, completion:nil) } // 画像をライブラリに保存したときのイベント(エラーの場合も呼ばれる) @objc func imageSavingEvent(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) { } } import PlaygroundSupport PlaygroundPage.current.liveView = ViewController()