Xcode Swift 3-无法覆盖“imagePickerController”

Xcode Swift 3-无法覆盖“imagePickerController”,xcode,swift,uiimagepickercontroller,swift3,xcode8,Xcode,Swift,Uiimagepickercontroller,Swift3,Xcode8,我的代码: func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { self.image = image self.imageStatusLabel.text = "There is a picture" self.imageStatusLabel.tex

我的代码:

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
}
但是,参数中没有图像,我可以得到图像。
我该怎么办?

如果从传递的信息字典中获取图像,请参见

你可能也想要

let image = info[UIImagePickerControllerOriginalImage] as? UIImage


您必须使用info参数并对UIImage进行转换。不要忘记,您必须在info.plist文件中添加隐私-照片库使用说明和隐私-相机使用说明,并用字符串填充值,解释请求访问照片库和相机的原因

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)
}
要在Swift3中使用imagePickerController,您需要添加一行,该行的键为:Privacy-Photo Library Usage Description,值为字符串,例如:访问照片到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)
    }

}
希望能有帮助

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.
  }
}
阅读更多有关用法的详细信息->

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.
  }
}