Как мне использовать обновленный UIImagePickerControllerDelegate iOS 12 API? - PullRequest
0 голосов
/ 05 июля 2018

Как использовать обновленный UIImagePickerControllerDelegate API, поскольку он изменился на [UIIMagePickerController.InfoKey : Any]? Эта часть была обновлена. Я также искал здесь, и я не мог найти ответ.

import UIKit

class adicionarNovoItemVc: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var textFieldNome: UITextField!
    let imagePicker = UIImagePickerController()
    @IBOutlet weak var namePreview: UILabel!
    @IBOutlet weak var imagePreview: UIImageView!
    let picker = UIImagePickerController()

    @IBAction func botaoAdcFoto(_ sender: UIButton) {
        picker.allowsEditing = true
        picker.delegate = self
        present(picker, animated: true)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true)
    }

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

Обновление:

После обновления делегата didFinishPickingMediaWithInfo на:

private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[.originalImage] as! UIImage? {
        self.imagePreview.image = image

        self.picker.dismiss(animated: true, completion: nil)
    }
}

Теперь я получаю:

Невозможно выполнить переход от 'Slice>' к более необязательному типу 'UIImage?'

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вам необходимо установить mediaTypes средства выбора, используя availableMediaTypes функцию класса UIImagePickerController и получить фактическое изображение из параметра info .

@IBAction func botaoAdcFoto(_ sender: UIButton) {
        picker.allowsEditing = true
        picker.delegate = self
        picker.sourceType = .photoLibrary
        if let mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) {
          picker.mediaTypes = mediaTypes
        }

        present(picker, animated: true)
    }

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as! UIImage? {
      self. imagePreview.setImage(image, for: .normal)

      self.picker.dismiss(animated: true, completion: nil)
    }
  }
0 голосов
/ 05 июля 2018

Это не сильно отличается. В iOS 12 многие старые имена констант были реорганизованы.

Вместо старого ключа UIImagePickerControllerOriginalImage вы теперь используете UIImagePickerController.InfoKey.originalImage:

Что-то вроде:

let image = info[UIImagePickerControllerOriginalImage]

теперь становится:

let image = info[.originalImage]

См. Соответствующую документацию для UIImagePickerController.InfoKey .

Обновление:

Вы сделали несколько ошибок в вашей попытке didFinishPickingMediaWithInfo. Вам нужно:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[.originalImage] as? UIImage {
        self.imagePreview.image = image
    }

    self.picker.dismiss(animated: true, completion: nil)
}
...