2016-11-27 13 views
0

写真を撮ったり、写真ライブラリから画像を選択した後、UIImageView内に画像を取り込もうとしています。ここUIImageViewは、撮影した画像または写真ライブラリから選択した画像の後で新しい画像で更新しません。

は、カメラと写真のライブラリアクティベーションを処理コードです:ここでは

@IBAction func activateCmera(_ sender: Any) { 
    if (UIImagePickerController.isSourceTypeAvailable(.camera)) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = .camera 
     imagePicker.allowsEditing = false 
     self.present(imagePicker, animated: true, completion: nil) 
    } 
} 


@IBAction func activatePhotoLib(_ sender: Any) { 
    if (UIImagePickerController.isSourceTypeAvailable(.photoLibrary)) { 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 
     imagePicker.sourceType = .photoLibrary 
     imagePicker.allowsEditing = false 
     self.present(imagePicker, animated: true, completion: nil) 
    } 
} 

はUIImageView内の画像を移入するコードです:

@IBOutlet weak var imageView: UIImageView! 

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage 
    self.imageView.contentMode = .scaleAspectFit 
    self.imageView.image = image 
    self.dismiss(animated: true, completion: nil); 
} 

私は私と一緒に写真を撮る現在後私の写真ライブラリから画像を選択すると、写真で更新されたUIImageViewのスペースなしで、アプリの最初のビューにリダイレクトされます。

ご協力いただきありがとうございます!

答えて

3

Swift 3には、keysplistに追加することでphotoLibraryにアクセスする権限が必要です。適切なdelegateメソッドを使用する必要があります。

enter image description here

あなたclassUIImagePickerControllerDelegate & UINavigationControllerDelegateを追加し、viewDidLoad &にimagePicker delegateを設定したコードの下に試してみてください。

let imagePicker = UIImagePickerController() 

    @IBAction func activatePhotoLib(_ sender: UIButton) { 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) { 
     imagePicker.delegate = self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary; 
     imagePicker.allowsEditing = false 
     self.present(imagePicker, animated: true, completion: nil) 
     } 
    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     imageView.image = image 
    } 
    picker.dismiss(animated: true, completion: nil); 
    } 

出力:updated

enter image description here

+0

おかげでこのコードをプッシュする必要がある、その後、グローバルオブジェクトのようにUIImagePickerControllerを保存する必要があります! – Jmuru

0

これはimagePickerController関数の構文は、(スウィフト3以降)変更されたことを説明するために失敗しXCodeのに関連する問題のようです。これらの2つの方法でWeb上に関数を書くことができます。また、エラーを起こさずにXcodeで両方を使用することができます。しかし、2番目の画像だけが実際に画像を正しく取得します。

(Option 1 - doesn't work, but XCode doesn't flag it): 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { } 

(Option 2 - this is the right syntax!): 
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { } 
0

は**あなたは、あなたのアクション機能に取り組ん **

@objc func getImage() { 

    imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary 

    imagePicker.allowsEditing = false 

    imagePicker.modalPresentationStyle = .overCurrentContext 

    present(imagePicker, animated: true) 

} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 
    imageView.image = image 
} 

self.dismiss(animated: true, completion: nil); 

}