【问题标题】:Swift 3 - Cannot override 'imagePickerController'Swift 3 - 无法覆盖'imagePickerController'
【发布时间】:2016-06-18 08:46:49
【问题描述】:

我的代码:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
    self.image = image
    self.imageStatusLabel.text = "There is a picture"
    self.imageStatusLabel.textColor = UIColor.blue()

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

这是错误:

无法覆盖已标记为不可用的“imagePickerController”:在 iOS 7 及更早版本中弃用的 API 在 Swift 中不可用

好吧,我已经尝试使用更新的功能:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    // But no image in the parameters
}

但是,参数中没有图像,我可以获取图像。
我该怎么办?

【问题讨论】:

    标签: xcode swift uiimagepickercontroller swift3 xcode8


    【解决方案1】:

    您必须使用 info 参数并转换为 UIImage。不要忘记您必须在info.plist 文件中输入“Privacy - Photo Library Usage Description”和“Privacy - Camera Usage Description”,并用字符串填充值,说明请求访问照片库和相机的原因。

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            pictureImageView.contentMode = .scaleToFill
            pictureImageView.image = pickedImage
        }
    
        picker.dismiss(animated: true, completion: nil)
    }
    

    【讨论】:

      【解决方案2】:

      要在Swift3 中使用imagePickerController,您需要添加一行键:Privacy - Photo Library Usage Description,值为string(例如:“访问您的照片”)到Info.plist 文件,让我们在下面尝试:

      class YourController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
      
          let imagePickerButton: UIButton = {
              let btn = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
              btn.setTitle("Choose a Photo", for: .normal)
              btn.setTitleColor(.white, for: .normal)
              btn.backgroundColor = .blue
              btn.addTarget(self, action: #selector(handlePickerDidTap), for: .touchUpInside)
      
              return btn
          }()
      
          override func viewDidLoad() {
              super.viewDidLoad()
              view.addSubview(imagePickerButton)
          }
      
          func handlePickerDidTap() {
              let imagePickerController = UIImagePickerController()
              imagePickerController.delegate = self
              imagePickerController.allowsEditing = true
              present(imagePickerController, animated: true, completion: nil)
          }
      
          func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
              print("photo is selected")
              // do some thing here
          }
      
          func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
              dismiss(animated: true, completion: nil)
          }
      
      }
      

      希望对您有所帮助!

      【讨论】:

        【解决方案3】:

        您从传递的info 字典中获取图像,查看documentation 中的键

        你可能想要一个

        let image = info[UIImagePickerControllerOriginalImage] as? UIImage
        

        let image = info[UIImagePickerControllerEditedImage] as? UIImage
        

        【讨论】:

          【解决方案4】:
          import UIKit
          import Photos
          
          class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
          
          @IBOutlet weak var imageView: UIImageView!
          
          @IBAction func selectPhotoLibrary(_ sender: Any) {
              let picker = UIImagePickerController()
              picker.delegate = self
              if UIImagePickerController.isSourceTypeAvailable(.camera) {
                  picker.sourceType = .camera
              } else{
                  print("Kamera desteklenmiyor.")
              }
              present(picker, animated: true, completion:nil)
          }
          
          @IBAction func selectPhotoCamera(_ sender: Any) {
              let picker = UIImagePickerController()
              picker.delegate = self
              picker.sourceType = .photoLibrary
              present(picker, animated: true, completion:nil)
          }
          
          override func viewDidLoad() {
              super.viewDidLoad()
              // Do any additional setup after loading the view, typically from a nib.
          }
          
          func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
              picker.dismiss(animated: true, completion:nil)
              guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else { return }
              guard let imageData = UIImageJPEGRepresentation(image, 0.8) else { return }
              self.imageView.image = image
              print(imageData)
          }
          
          func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
              picker.dismiss(animated: true, completion:nil)
          }
          
          override func didReceiveMemoryWarning() {
              super.didReceiveMemoryWarning()
              // Dispose of any resources that can be recreated.
            }
          }
          

          阅读更多使用细节 --> https://medium.com/@yakupad/swift-uiimagepickercontroller-kullanımı-91771ed4c1d6

          【讨论】:

            猜你喜欢
            • 2017-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-02
            • 1970-01-01
            • 1970-01-01
            • 2018-11-18
            • 1970-01-01
            相关资源
            最近更新 更多