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

Posted

技术标签:

【中文标题】有没有办法将 segue 操作延迟到用户通过他们的照片库选择图像或拍照之后?迅速【英文标题】: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 【发布时间】:2016-04-02 21:44:47 【问题描述】:

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

@IBAction func camera(sender: 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 设置为我的主 ViewController 的超类。

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

【问题讨论】:

在此处发布您的代码(尝试),以便其他人能够更好地理解您的问题并为您提供帮助。 听起来您需要使用performSegueWithIndentifier 以编程方式触发segue,而不是直接从按钮触发segue。 【参考方案1】:

不要将 segue 从按钮分配给 ViewController。将 Segue 从 ViewController 分配给 ViewController。现在,当您从相机拍摄照片时,您将被重定向回 didfinishpicking 委托方法,在此方法中执行 self.performSegueWithIdentifer 并从 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
  

【讨论】:

我添加了从 ViewController 到 ViewController 的 segue 并添加了该代码,它仍然说我正在尝试渲染和清空快照。我是否需要将此代码延迟到以某种方式拍摄图像之后? 你在哪里得到这个错误。你能用错误编辑你的问题吗?在准备 segue 中,您必须传递从相机捕获的图像。您必须在 didfinishPickingMediaWithInfo 的末尾添加 performegue。 @Josh 你必须先打好基础。如何在 didfinishpicking 中添加 prepareforsegue ......这个 imageDisplay 在哪里声明?如果你想在新的 VC 中显示图像,那么你必须在 prepareforsegue 中传递图像,然后在 thd imageview 中显示。 好的。我确实需要在基础上工作,我会的。感谢您的所有帮助!

以上是关于有没有办法将 segue 操作延迟到用户通过他们的照片库选择图像或拍照之后?迅速的主要内容,如果未能解决你的问题,请参考以下文章

为登录用户触发 Segue

使用 IBAction 将数据传递到另一个视图控制器而无需 segue swift

用户有没有办法使用 iPhone sdk 通过 LinkedIn 邀请他们的朋友?

不小心删除了segue。建议?

有没有办法通过signalR中的唯一指导正确地将消息发送给所有用户?

第一个有 2 秒延迟的 segue