UIImageView不显示来自UIImagePickerController的Image

时间:2011-10-25 09:48:37

标签: ios uiimageview uiimagepickercontroller

我正在尝试用我的应用程序拍照,然后在我的.xib中预定义的UIImageView中显示它。我有一个IBOutlet UIImageView * _foto链接到.xib中的UIImageView

当我执行以下操作时,在拍摄照片后图片不会显示在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中。这让我很困惑,我不知道发生了什么,我所知道的是,这不是我预期的行为。有没有人有任何线索,希望是解决这个问题的正确方法?

2 个答案:

答案 0 :(得分:0)

ArturOzierański的回答是部分正确的。

如果您正在使用viewDidLayoutSubviews()来配置您的布局,那么当选择器消失时会调用它,因此如果您在viewDidLayoutSubviews()中设置默认图像,您将重置回默认图像。

在viewDidLoad中配置默认​​图像。

答案 1 :(得分:-1)

UIImagePickerController在拾取图像时会占用大量设备内存。在- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo期间,我注意到很多次内存警告级别为1和2.它可能导致强制卸载并重新加载视图,再次启动视图控制器的viewDidLoad方法。如果您的_foto对象是IBOutlet,它将从内存中删除并再次加载所有属性的起始值(图像也是如此)。此外,如果您在viewDidLoad中将image设置为nil,则可能是一个原因。

将一些NSLog放入viewDidLoad以检查它是否重新启动。您也可以尝试将捕获的图像放入库中 - 如果库中存在图像,则问题可能在视图中卸载。