2011-10-25 173 views
0

我想用我的應用程序拍照,然後在我的.xib中預定義的UIImageView中顯示它。我有一個IBOutlet中的UIImageView * _foto被鏈接到的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]; 
} 

現在的圖像顯示了無論是在新創建的圖像視圖我的看法的左上角,正如預期的那樣,但是al所以在我的_foto UIImageView。這讓我非常困惑,我不知道發生了什麼,我只知道這不是我所期望的行爲。有沒有人有任何線索,並希望爲這個問題妥善解決?

+0

你也可以發佈你的IB Outlet _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中將圖像設置爲零,這可能是一個原因。

將一些NSLog放入viewDidLoad中檢查它是否重新啓動。您也可以嘗試將捕獲的圖像放入庫中 - 如果圖像存在於庫中,則問題可能是卸載。

+0

它沒有被釋放,因爲負載,但viewDidLoad在imagepicker被解僱後,再次被調用,清空_foto imageView。所以這不完全是解決方案,但提供瞭解決問題的見解。 – ophychius

0

ArturOzierański的回答部分正確。

如果您使用viewDidLayoutSubviews()來配置佈局,當拾取器消失時會被調用,所以如果您在viewDidLayoutSubviews()中設置了默認圖像,則會重置爲默認圖像。

在viewDidLoad中配置默認​​圖像。

相關問題