Установка выбранного изображения из UIImagePicker в UIImageView в Swift - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать код, чтобы пользователь мог установить изображение из своей библиотеки или из своей камеры Roll и установить его на ImageView на экране.

Я попытался добавить эту функцию, однакоэто не похоже на работу

private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        picker.dismiss(animated: true, completion: nil)
        //You will get cropped image here..
        if let image = info[editedImage] as UIImage
        {
            self.Picture.image = image
        }
    }

Вот мой код на данный момент

class NewViewController: UIViewController, UIImagePickerControllerDelegate {

    @IBOutlet var Picture: UIImageView! //the image I am trying to change 

    let imagepicker = UIImagePickerController()

@IBAction func ImagePicker(_ sender: Any) {
        let alert = UIAlertController(title: "Photo", message: "Would you like to choose a picture from your libray, or take a new photo?", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: { action in
            switch action.style{
            case .default:
                self.imagepicker.sourceType = .photoLibrary
                self.imagepicker.allowsEditing = true
                self.imagepicker.delegate = self
                self.present(self.imagepicker, animated: true)
                print("default")

            case .cancel:
                print("cancel")

            case .destructive:
                print("destructive")
            }}))
        alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: { action in
            switch action.style{
            case .default:
                self.imagepicker.sourceType = .camera
                self.imagepicker.allowsEditing = true
                self.imagepicker.delegate = self
                self.present(self.imagepicker, animated: true)

                print("default")

            case .cancel:
                print("cancel")

            case .destructive:
                print("destructive")
            }}))
        self.present(alert, animated: true, completion: nil)
    }
}

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Вам необходимо изменить method подпись как,

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

    picker.dismiss(animated: true, completion: nil)
    guard let image = info[.editedImage] as? UIImage else { return }
    self.Picture.image = image
} 

Вы можете проверить подпись метода здесь . В настоящее время ваш метод не вызывается делегатом UIImagePickerController из-за неправильных параметров. Если вы удалите ключевое слово private из метода, вы получите предупреждение, как показано ниже, что означает, что он похож на тот же метод, но не то, что UIImagePickerController делегат позвонит.

Метод экземпляра imagePickerController (: didFinishPickingMediaWithInfo :) 'почти соответствует необязательному требованию 'imagePickerController (: didFinishPickingMediaWithInfo :)' протокола 'UIImagePickerControllerDelegate'

0 голосов
/ 23 мая 2019

Почему вы пытаетесь использовать editedImage в качестве ключа здесь? Это должно быть .editedImage

...