2016-03-30 14 views
0

を却下した後に動作していない私は、彼らが写真を撮ったり、自分のライブラリから画像を選択するかどうかをユーザーに尋ねるアラートをトリガーバーボタンアイテムを持っています。写真ライブラリを選択すると、UIImagePickerControllerをインスタンス化して写真を選択します。バーボタン項目はUIImagePickerController

私の問題は、画像を選択してView Controllerを終了すると、元のView Controllerに戻り、画像がコンセントに正しく表示されますが、以前に機能していたボタンは警告をトリガして画像を選択しませんもう一度(コンソールに何も印刷されません)。

@IBAction func pickAnImage(sender: AnyObject) { 
    selectImageSourceAlert() 
} 

func selectImageSourceAlert() { 
    let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) 
    let userLibrary = UIAlertAction(title: "Photo Library", style: .Default) { 
     _ in 
     self.presentImagePicker(pickerStyle: .PhotoLibrary) 
    } 
    let useCamera = UIAlertAction(title: "Camera", style: .Default) { 
     _ in 
     let x = UIImagePickerController.isSourceTypeAvailable(.Camera) 
     print(x) 
     if x { 
      self.presentImagePicker(pickerStyle: .Camera) 
     } else { 
      print("No camera available") 
     } 
    } 

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil) 

    alert.addAction(userLibrary) 
    alert.addAction(useCamera) 
    alert.addAction(cancelAction) 

    presentViewController(alert, animated: true, completion: nil) 
} 

func presentImagePicker(pickerStyle style: UIImagePickerControllerSourceType) { 
    let imagePicker = UIImagePickerController() 
    imagePicker.delegate = self 
    imagePicker.sourceType = style 
    imagePicker.allowsEditing = true 

    self.presentViewController(imagePicker, animated: true, completion: nil) 
} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    self.dismissViewControllerAnimated(true, completion: nil) 

    if let image = info["UIImagePickerControllerEditedImage"] as? UIImage { 
     imagePickerView.image = image 
    } 
} 

私はまだそれを理解することができません。私は、 "if let image = info"ビットを削除し、imagePickerViewアウトレットにイメージを割り当てるのをやめると、ボタンがView Controllerを終了した後に動作することを発見しました。画像を選択する前にキャンセルしてもボタンは機能します。イメージをコンセントに割り当てても機能しません。

ありがとうございました!

編集:私は右上隅にある第二のボタンを追加し、同じアクションに割り当てられたときに、私は気づいた、それも写真を割り当てた後に動作します。左下隅の最初のBar Button Itemは、imageViewに割り当てられている画像がないときにのみ機能します。なぜimageViewで覆われていないのかわかりません。明快にするために背景色を追加しました。

Simulation Image

+0

私たちのイメージピッカーをトリガーボタンのコードをご提示ください。 –

+0

オリジナルの投稿に追加コードを追加しました。もう少し長いですが、うまくいけば助けてください。 –

+0

私は新しいプロジェクトであなたのコードを試してみましたが、私の場合は問題なく動作します。 イメージピッカーを解除して、選択したイメージで何をやっていますか? – RomanN

答えて

1

画像を選択した後、あなたのツールバーが0の高さを有しています。 これは「デバッグビュー階層」で確認できます。ただ制約を削除し、この問題を解決するには

「Toolbar.top =イメージピッカーView.bottom + 192」

+0

ツールバーの削除方法は変わりますが、バーボタンの項目は引き続き表示されます。しかし、これは私のためにやった!ダミアンありがとう! –

0

あなたはこの行を削除する必要があります。

self.dismissViewControllerAnimated(true, completion: nil) 

あなたが本当にピッカーが閉じられたイメージとしてこれを必要としません。 この関数は、現在のView Controllerを終了します。

また、UIオブジェクトを更新するときdispatch_async使用するようにしてください。

dispatch_async(dispatch_get_main_queue(), 
{ 
    if let image = info["UIImagePickerControllerEditedImage"] as? UIImage 
    { 
    self.imagePickerView.image = image 
    } 
}) 
+0

動作しませんでしたが、入力に感謝します。私は先に進んで、オリジナルの質問を詳細と画像で更新しました。うまくいけば、これは役に立ちます。私は信じられないほどシンプルなものを見逃していると思うが、私の人生のためにそれを見ることはできない。 –

+0

こんにちはEman、使用しているすべてのコードですか?ここに何か不足しているようですね? –

+0

これは間違いなく私のUIBarButtonItemと関係があります。たぶんストーリーボードの問題?ここにgithubプロジェクトへのリンクがあります。ストーリーボードで何かを捕まえることができますか? [git](https://github.com/emanleet/Meme-Me) –