我正在尝试用我的应用程序拍照,然后在我的.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中。这让我很困惑,我不知道发生了什么,我所知道的是,这不是我预期的行为。有没有人有任何线索,希望是解决这个问题的正确方法?
答案 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以检查它是否重新启动。您也可以尝试将捕获的图像放入库中 - 如果库中存在图像,则问题可能在视图中卸载。