无法将从相机拍摄的图像传递到另一个viewcontroller

时间:2016-08-14 13:48:01

标签: ios swift camera

我有一个按钮来拍摄图像。我希望将从摄像头拍摄的图像传递给另一个视图控制器。第一个视图控制器的代码如下所示。

    @IBAction func takePhoto(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])
{
    TakenImage = info[UIImagePickerControllerOriginalImage] as? UIImage ; dismissViewControllerAnimated(true, completion: nil )

let controller = self.storyboard!.instantiateViewControllerWithIdentifier("NoteDetailViewController") as! NoteDetailViewController

    controller.takinPhoto = true

    if (note != "")
    {
        controller.content = note
    }

    controller.imageFromCamera = TakenImage

    if (self.tags != "")
    {
        controller.tagsTextField.text = self.tags
    }
     self.presentViewController(controller, animated: true, completion: nil)
}
@IBAction func save(sender: AnyObject)
{
    UIImageWriteToSavedPhotosAlbum(TakenImage!, self, "image:didFinishSavingWithError:contextInfo:", nil)
}
func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>)
{
    if error == nil {
        let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .Alert)
        ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        presentViewController(ac, animated: true, completion: nil)
    } else
    {
        let ac = UIAlertController(title: "Save error", message: error?.localizedDescription, preferredStyle: .Alert)
        ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        presentViewController(ac, animated: true, completion: nil)
    }
}

我的第二个viewcontroller的代码如下所示

if (takinPhoto == true)
    {
        if (imageFromCamera != nil)
        {
            if let image1 = self.imageFromCamera
            {
                self.imageView2.image = image1
            }

        }
        if (self.content != "")
        {
            self.contentTextField2.text = content
        }

    }

但是来自相机的图像没有出现在第二个viewcontroller中。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

更新了答案。

我重写了你的代码并且能够让它在本地工作。主要的变化是使用一种特定于照片的不同委托方法。

@IBAction func takePhoto(sender: AnyObject) {   let picker = UIImagePickerController()
    picker.delegate = self
    picker.sourceType = .Camera
    presentViewController(picker, animated: true,completion : nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
    takenImage = image
    dismissViewControllerAnimated(true, completion: nil)
}

@IBAction func save(sender: AnyObject) {
    UIImageWriteToSavedPhotosAlbum(takenImage!, self, #selector(ViewController.image(_:didFinishSavingWithError:contextInfo:)), nil)
}

func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) {
    if error == nil {
        let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .Alert)
        ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        presentViewController(ac, animated: true, completion: nil)
    } else {
        let ac = UIAlertController(title: "Save error", message: error?.localizedDescription, preferredStyle: .Alert)
        ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        presentViewController(ac, animated: true, completion: nil)
    }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "saveTakenImage") {
        let controller = segue.destinationViewController as! NoteDetailViewController
        controller.takinPhoto = true
        if (note != "") {
            controller.content = note
        }

        controller.imageFromCamera = takenImage

        if (self.tags != "") {
            controller.tagsTextField.text = self.tags
        }
    }
}