有没有办法将 segue 操作延迟到用户通过他们的照片库选择图像或拍照之后? SWIFT

Is there a way to delay the segue action until after the user picks an image through their photo library or takes a photo? SWIFT

我是编程新手,我有两个按钮,一个是相机,另一个是选择现有照片。我可以使用相机按钮访问相机功能,并尝试将我拍摄的图像显示到另一个视图控制器中的 UIImage 上。我的代码给我一个无法在拍摄前呈现快照的错误。我认为这是因为我还试图将按钮用作 segue 来显示新的视图控制器。有没有办法将 segue 操作延迟到用户通过他们的照片库选择图像或拍照之后?

@IBAction func camera(发件人:AnyObject){

    let picker = UIImagePickerController()

    picker.delegate = self
    picker.sourceType = .Camera

    presentViewController(picker, animated: true, completion: nil)

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        self.performSegueWithIdentifier("Show", sender: self)


        func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
        {
            if segue.identifier == "Show" {
                imageDisplay.image = info[UIImagePickerControllerOriginalImage] as? UIImage
                dismissViewControllerAnimated(true, completion: nil)
            }
        }
    }

这是我的按钮代码。 imageDisplay 是我为 ImageView 创建的一个图像出口,为了让这段代码识别它,我将我的 ImageDisplayViewController 设为我的 main ViewController 的超类。

这是我收到的错误。
对尚未呈现的视图进行快照会生成空快照。确保您的视图在屏幕更新之前或快照之前至少渲染过一次。

不要将 segue from 按钮分配给 ViewController。将 segue 从 ViewController 分配到 ViewController。现在,当您从相机拍摄照片时,您将被重定向回 didfinishpicking 委托方法,在此方法中,do self.performSegueWithIdentifer 和 select 您的控制器来自 prepareforsegue。假设你的 segue 名称是 show.

我已经为你重写了代码。假设您的第二个 VC 是 displayImageVC。在那里创建一个 属性 作为 UIImage 类型的 showImage。然后在 prepareforsegue 中传递捕获的图像。

var capturedImage = UIImage?
let picker = UIImagePickerController()     picker.delegate = self picker.sourceType = .Camera     presentViewController(picker, animated: true, completion: nil) 

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
 self.capturedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
 self.performSegueWithIdentifier("Show", sender: self) 
}

func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
if segue.identifier == "Show" { 
    let displayImageVC = segue.destination as displayImageVC
    displayImageVC.showImage = self.capturedImage
 } 
}