2016年9月26日月曜日

UIImagePickerControllerは自分で閉じる

フォトライブラリから画像を取得するコードをSwift 3.0で書いてるんだけど、うまくいかなかった。

Delegateの設定

if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
     let imagePicker = UIImagePickerController()
     imagePicker.delegate = self
     imagePicker.sourceType = .photoLibrary
     present(imagePicker, animated: true, completion: nil//イメージピッカー表示
else {
     print("フォトライブラリが使えません")
}

上記で
imagePicker.delegate = self
と宣言するために、頭のところでUIImagePickerControllerDelegateと設定するだけじゃダメで、以下のようにUINavigationControllerDelegateも設定してやらないとエラーが出てしまう。

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { ~ }

UIImagePickerControllerのviewは自分で閉じよう

イメージピッカーで画像を選択したら、以下のdelegateメソッドが呼ばれるわけだが、
[Generic] Creating an image format with an unknown type is an error
というメッセージが出るばかりでイメージピッカーが閉じて画像をimageViewに表示してくれない。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage?
    imageView.image = image
}

と思ったら、
picker.dismiss(animated: true, completion: nil)
ってやって自分でイメージピッカーを閉じてやらにゃいかんのね。
今までObjective-Cでやってた時は自分で閉じてくれてたのに。
なんだろ、複数選択とかに対応したとかかね?
なおピッカーが閉じたところ、隠れてたimageViewには選択した画像がちゃんと表示されてた。
それでも[Generic] Creating an image format with an unknown type is an errorのメッセージは出るんだけど、これはXcode8になってから余計なメッセージが出る現象の一つかもしれないので、実用上問題なければ無視すればいいと思う。

2 件のコメント:

  1. picker.dismiss(animated: true, completion: nil)とやっても
    dismiss(animated: true, completion: nil)
    とやっても私も発生します・・・・

    返信削除
    返信
    1. こんにちは。
      発生するのは[Generic] Creating an image format with an unknown type is an errorのメッセージのことですね?
      ちょっとしたことでどうでもいいような警告を出すXcodeの仕様が直ってないようですね。このままずっとだとうざったいですねえ。本当に見るべきメッセージがまぎれちゃいそうですし。

      削除