2011-10-25 204 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中配置默认​​图像。

相关问题