2016-04-02 9 views
0

私はプログラミングが新しく、2つのボタンがあります.1つはカメラ、もう1つはchooseExistingPhotoです。私はカメラのボタンでカメラ機能にアクセスすることができ、別のビューコントローラでUIImageに取り込む画像を表示しようとしています。私のコードでは、撮影前にスナップショットをレンダリングできないというエラーが出ています。これは、新しいView Controllerを表示するためにボタンをセグーとして使用しようとしているためです。ユーザーがフォトライブラリで画像を選択するか、写真を撮るまで、セグアクションを遅らせる方法はありますか?ユーザーがフォトライブラリで画像を選択するか、写真を撮るまで、セグアクションを遅らせる方法はありますか? SWIFT

@IBActionのFUNCカメラ(送信者: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のスーパークラスにしました。

これは私が受け取っているエラーです。
レンダリングされていないビューをスナップショットすると、空のスナップショットが作成されます。画面の更新後にスナップショットまたはスナップショットを作成する前に、ビューが少なくとも1回レンダリングされていることを確認してください。

+0

他の人があなたの問題をよりよく理解して助けてくれるように、ここにコードを投稿してください。 – Amir

+0

ボタンから直接セグをトリガーするのではなく、 'performSegueWithIndentifier'を使ってプログラムでセグをトリガーする必要があるようです。 – Paulw11

答えて

1

ボタンからViewControllerにsegueを割り当てないでください。 ViewControllerからSegueをViewControllerに割り当てます。カメラから写真を撮ったら、このメソッドでdidfinishpickingデリゲートメソッドにリダイレクトされます。self.performSegueWithIdentiferを実行し、prepareforsegueからコントローラを選択します。あなたのsegueの名前が表示されます。

私はコードを書き直しました。 2番目のVCはdisplayImageVCです。 UIImage型のshowImageとしてプロパティを作成します。その後、撮影の準備をします。

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 
} 
} 
+0

ViewControllerからSegueをViewControllerに追加し、そのコードを追加しましたが、まだスナップショットをレンダリングしようとしています。画像が何とか撮られるまで、このコードを遅らせる必要がありますか? – Josh

+0

このエラーはどこで発生していますか。エラーであなたの質問を編集できますか?あなたがカメラからキャプチャした画像を渡す必要があります。 didfinishPickingMediaWithInfoの最後にperformsegueを追加する必要があります。 –

+0

大丈夫私の質問を編集しました – Josh