2011-10-25 12 views
0

私のアプリで写真を撮り、自分の.xibにあらかじめ定義されているUIImageViewに表示しようとしています。私は写真を撮った後、UIImageViewで画像doesntのショーを次の手順を実行した場合、その_foto IBOutlet UIImageView *は.xibUIImageViewはUIImagePickerControllerの画像を表示しません

にUIImageViewにリンクされています:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
    { 

     _foto.image = image; 
     //Also tried set image, and resizing the image first 

     [self dismissModalViewControllerAnimated:YES]; 

    } 

さて、私が追加したときイメージと新しいイメージビューを作成するためのコードは、私のピッカーから返され、そしてこのような私のビューにサブビューとしてそれを追加し、奇妙な何かが起こる:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{ 


    UIImageView *iv = [ [UIImageView alloc] initWithImage:image]; 

    [self.view addSubview:iv]; 

    [iv release]; 

    _foto.image = image; 

    [self dismissModalViewControllerAnimated:YES]; 
} 

を今すぐ画像が新しく作成された画像表示の両方で示してい私のビューの左上隅、期待どおりに、しかし、私の_foto UIImageViewのように。これは私が真剣に混乱している、私は何が起こっているのか分からない、私が知っていることは、それが私が期待した行動ではないということです。誰にも手掛かりがあり、うまくいけばこの問題の適切な解決策はありますか?

+0

IBアウトレット_fotoのプロパティを掲載することはできますか? (スクリーンショット)。 [_foto setNeedsDisplay]を送信しようとしましたか? –

+0

@JonasSchnelli私はsetNeedsDisplayを試しましたが、それは何も変わらない(私はそれがとにかくすべきだとは思わない)。そしてあなたは特定の特性が必要ですか?コードにプロパティはありません。Interface Builderの標準画像ビューをドラッグしてビューに表示します。 – ophychius

答えて

-1

UIImagePickerControllerは、画像を選択する際に多くのデバイスメモリを取得します。 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo私は何度もメモリ警告レベル1と2に気付きました。強制的にビューをアンロードしてビューを再ロードし、ビューコントローラのviewDidLoadメソッドを再度起動します。 _fotoオブジェクトがIBOutletの場合、メモリから削除され、すべてのプロパティの開始値(イメージも)で再び読み込まれます。また、viewDidLoadでイメージをnilに設定した場合は、それが理由である可能性があります。

NSLogをviewDidLoadに入れて、再起動されているかどうかをチェックします。また、キャプチャされたイメージをライブラリに入れることもできます。ライブラリにイメージが存在する場合は、おそらくビューのアンロード中です。

+0

ロードのために解放されませんでしたが、imagepickerが終了した後にviewDidLoadが再度呼び出され、_foto imageViewが空になりました。だから、これはまさに解決策ではありませんでしたが、問題を解決するための洞察を提供しました。 – ophychius

0

ArturOzierańskiの回答は部分的に正しいです。

レイアウトを設定するためにviewDidLayoutSubviews()を使用している場合、ピッカーが表示されなくなったときに呼び出されます。したがって、デフォルトのイメージをviewDidLayoutSubviews()に設定すると、デフォルトのイメージにリセットされます。

デフォルトのイメージをviewDidLoadに設定します。

関連する問題