有没有办法将 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 操作延迟到用户通过他们的照片库选择图像或拍照之后?迅速的主要内容,如果未能解决你的问题,请参考以下文章
使用 IBAction 将数据传递到另一个视图控制器而无需 segue swift
用户有没有办法使用 iPhone sdk 通过 LinkedIn 邀请他们的朋友?