1

我如何使用更新后的UIImagePickerControllerDelegateAPI,因为它已更改为[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)
    }
}

我现在得到:

无法从“切片>”向下转换为更可选的类型“UIImage?”

4

2 回答 2

6

这并没有太大的不同。在 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)
}
于 2018-07-05T02:44:28.313 回答
1

您需要使用 UIImagePickerController 的availableMediaTypes类函数设置选取器的mediaTypes ,并从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)
    }
  }
于 2018-07-05T03:20:31.743 回答