Swift ImagePickerController的didFinishPickingMediaWithInfo未触发。

6

我使用 ImagePickerController 来获取个人资料图片。用户有一个按钮,该按钮触发 CamRoll 函数。当点击按钮时,正常的 ImagePickerViewController 出现了,但是 didFinishPickingMediaWithInfo 没有被调用。在 Swift/Xcode 的早期版本中,相同的代码被调用过。这是我的代码。

import UIKit

class AnnonseViewController: UIViewController, UIImagePickerControllerDelegate {

@IBOutlet var Image: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.

}

@IBAction func CamRoll(_ sender: Any) {

    let imagePicker = UIImagePickerController()

    imagePicker.delegate = self

    imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary

    self.present(imagePicker, animated: true, completion: nil)

}

private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [AnyHashable: Any]) {
    var image = info[UIImagePickerControllerOriginalImage] as! UIImage

    let imageSize = image.size
    let width = imageSize.width
    let height = imageSize.height

    if width != height {
        let newDimensions = min(width,height)
        let widthOffset = (width - newDimensions) / 2
        let heightOffset = (height - newDimensions) / 2

        UIGraphicsBeginImageContextWithOptions(CGSize(width: newDimensions, height: newDimensions), false, 0.0)

        image.draw(at: CGPoint(x: -widthOffset, y: -heightOffset), blendMode: .copy, alpha: 1.0)

        image = UIGraphicsGetImageFromCurrentImageContext()! as UIImage
        UIGraphicsEndImageContext()

    }

    UIGraphicsBeginImageContext(CGSize(width: 150, height: 150))

    _ = UIGraphicsGetCurrentContext()

    image.draw(in: CGRect(x: 0, y: 0, width: 150, height: 150))

    let smallImage = UIGraphicsGetImageFromCurrentImageContext()

    Image.image = smallImage

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


}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
}

}

代码为什么没有被调用?

2个回答

10

UIImagePickerControllerDelegate在Swift 3中正确的委托方法是:imagePickerController(_:didFinishPickingMediaWithInfo:)的实现如下:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

}

你可以查看苹果文档了解有关UIImagePickerControllerDelegate的更多详细信息。


0
在Swift 4中,方法again具有不同的签名,使用UIImagePickerController.InfoKey替换了String:
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接