Как добавить изображение, снятое камерой или галереей, на кнопку? - PullRequest
0 голосов
/ 20 июня 2019

Я использую UIImagePickerController, чтобы выбрать источник для съемки. Это изображение должно быть установлено на UIButton.

Я знаю, что вы можете добавить UIImage к UIButton по строке, как someButton.setImage(UIImage(named:...)), но мне нужно установить его с помощью переменной, которую я создаю при съемке.

@IBOutlet weak var addPictureOutlet: UIButton!

func chooseSource() {

    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self


    let kameraAction = UIAlertAction(title: "Kamera",
                                     style: .default) { (action) in
                                        imagePickerController.sourceType = .camera
                                        self.present(imagePickerController, animated: true, completion: nil)
    }

    let libraryAction = UIAlertAction(title: "Galerie",
                                      style: .default) { (action) in
                                        imagePickerController.sourceType = .photoLibrary
                                        self.present(imagePickerController, animated: true, completion: nil)
    }

    let cancelAction = UIAlertAction(title: "Cancel",
                                     style: .cancel)

    let alert = UIAlertController(title: "Quelle",
                                  message: "Wählen sie eine Quelle für die Klausur.",
                                  preferredStyle: .actionSheet)
    alert.addAction(kameraAction)
    alert.addAction(libraryAction)
    alert.addAction(cancelAction)

    self.present(alert, animated: true) {

    }
}

@IBAction func addPicture(_ sender: UIButton) {

    chooseSource()

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image1 = info[UIImagePickerController.InfoKey.originalImage] as! UIImage

        addPictureOutlet.setImage(image1, for: .normal)
    }
}

Я пробовал это, но я не могу понять, почему это не работает, нет ошибки при компиляции или запуске и UIImage из UIButton не меняется.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы должны использовать это так. Вы не можете использовать функцию в действии.

@IBOutlet weak var addPictureOutlet: UIButton!

    func chooseSource() {

        let imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self


        let kameraAction = UIAlertAction(title: "Kamera",
                                         style: .default) { (action) in
                                            imagePickerController.sourceType = .camera
                                            self.present(imagePickerController, animated: true, completion: nil)
        }

        let libraryAction = UIAlertAction(title: "Galerie",
                                          style: .default) { (action) in
                                            imagePickerController.sourceType = .photoLibrary
                                            self.present(imagePickerController, animated: true, completion: nil)
        }

        let cancelAction = UIAlertAction(title: "Cancel",
                                         style: .cancel)

        let alert = UIAlertController(title: "Quelle",
                                      message: "Wählen sie eine Quelle für die Klausur.",
                                      preferredStyle: .actionSheet)
        alert.addAction(kameraAction)
        alert.addAction(libraryAction)
        alert.addAction(cancelAction)

        self.present(alert, animated: true) {

        }
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let image1 = info[UIImagePickerController.InfoKey.originalImage] as! UIImage

        addPictureOutlet.setImage(image1, for: .normal)
    }

    @IBAction func addPicture(_ sender: UIButton) {
        chooseSource()
    }
0 голосов
/ 21 июня 2019

Как вы сказали, это не входит в метод imagePicker, похоже, вы пропустили делегата для правильной работы метода imagePicker

Добавьте UIImagePickerControllerDelegate и создайте переменную для назначения UIImagePickerController var imagePicker = UIImagePickerController() и установки imagePicker.delegate = self

...