UIImagePickerController didFinishPickingImage 在完成时调用自定义函数

UIImagePickerController didFinishPickingImage calling custom function upon completion

我正在开发一个带有 MapView 的应用程序,我有一个显示在 MapView 顶部的自定义按钮。当用户单击该按钮时,我想启动相机,然后用户拍照并选择 "Use Photo"。除了下一部分,我已经完成了所有这些工作。一旦用户选择 "Use Photo",我希望将捕获的图像传递给另一个函数。然后视图被释放并返回到地图。我在想这可以使用完成处理程序来完成吗?但我不太 crystal 清楚这是否是最好的方法,如果是的话,如何将 UIImage 类型的图像传递给要处理的函数。有人可以帮忙吗?

我现在有类似以下内容:

@IBAction func mapButton(sender: AnyObject) {
     let image = UIImagePickerController()
     //image.delegate = self
     image.sourceType = UIImagePickerControllerSourceType.Camera
     image.allowsEditing = false
     self.presentViewController(image, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
     self.dismissViewControllerAnimated(true, completion: customFunction(image))
}

func customFunction(image: UIImage) {
     print("Do Something with Image")
}

通过取消注释行 //image.delegate = self 来设置图像选择器委托(为清楚起见,您可能希望将选择器重命名为 imagePicker 或 imagePickerController 以明确这是一个选择器,而不是所选择的图像)。

此外 didFinishPickingImage 已弃用,因此最好使用 didFinishPickingMediaWithInfo

在完成处理程序上调用函数:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {        
        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage{
            dismissViewControllerAnimated(true, completion: { self.customFunction(pickedImage)} )   
        }else{
            dismissViewControllerAnimated(true, completion: nil)
        }
    }

或者您可以只调用该函数,然后他们关闭选择器:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {        
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage{
          customFunction(pickedImage)   
     }
     dismissViewControllerAnimated(true, completion: nil)

}       

委托中返回的图像可以先保存在引用中。然后关闭视图控制器,然后调用您的自定义方法。这将确保在关闭视图控制器之前保存图像引用。

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
     let selectedImage=image;
     self.dismissViewControllerAnimated(true, completion: nil)
     customFunction(image);
}