2019年6月10日月曜日

swiftでカメラロールの画像読み込み

撮影した画像に色々な加工ができるアプリをswiftで作ってみる。

Xcodeを更新してからまともにアプリを作ってなかったため、ver10.2.1での変更についていけなかった点が結構ありました。まず、ストーリーボードを開いてから、ボタンとかの配置どこいった??ってとこから始まりました。

だけど、基本的にはstory boardの使い方は一緒なので、試行錯誤的にイメージビューとナビゲーションバー、ボタンを配置。ナビゲーションバー上のボタンを押してカメラロールを表示して、画像を選択したらイメージビューに表示するコードを作成した。
画面の大きさや配置は後回しという事で。






swiftバージョンという事で、ピッカービューで選択した画像をイメージビューに表示する部分に若干時間がかかったので備忘録的にコードを書く。


import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{

    var picker: UIImagePickerController!
    @IBOutlet weak var IV_Main: UIImageView!
    @IBOutlet weak var BBI_FileAccess: UIBarButtonItem!
    
    //画面が初期化時に呼ばれる
    override func viewDidLoad() {
        super.viewDidLoad()
        //PickerViewの初期化
        picker = UIImagePickerController()
        picker.delegate = self
        picker.sourceType = UIImagePickerController.SourceType.photoLibrary
    }

    //ファイルアクセスボタン押下
    @IBAction func Push_BBI_FileAccess(_ sender: UIBarButtonItem) {
        present(picker, animated: true)
    }
    
    //イメージピッカーが「キャンセル」された場合に呼ばれる
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
    //イメージピッカーが「選択」された場合に呼ばれる
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image = info[.originalImage] as! UIImage
        IV_Main.image = image
        dismiss(animated: true, completion: nil)
    }

}

時間かかったポイントとして、イメージピッカーの画面で画像を選択してもl.28の関数が呼ばれん。という事で、l.6でPickerクラスを作ってから、l.13付近で初期化してdelegate設定しないとダメでした。前提として、l.3のdelegate宣言は忘れずに。

あと、Picker画面で画像を選択しても、dismissしないといつまでたっても画面がきえないのね。

ということが分かりました。

0 件のコメント:

コメントを投稿