Search code examples
swiftuiimagepickercontroller

How to properly select a photo in photo library after clicking on image view?


I'm trying to select a photo in photo library after clicking on the image view, but nothing happens. Could you please say what's wrong?

imgView.isUserInteractionEnabled = true
let gestureRecognizer = UIGestureRecognizer(target: self, action: #selector(changeImage))
imgView.addGestureRecognizer(gestureRecognizer)

@objc func changeImage() {
          
        let imagePicker = UIImagePickerController()
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = true
        imagePicker.delegate = self
        present(imagePicker, animated: true, completion: nil)
    }

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        
        if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerEditedImage")] as? UIImage {
                self.imgView.image = image
        }
        picker.dismiss(animated: true, completion: nil)
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
}

Solution

  • Use UITapGestureRecognizer instead of the UIGestureRecognizer.

    let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(changeImage))