【发布时间】:2011-03-28 13:17:01
【问题描述】:
我想要做的是在我的整个应用程序中始终使用相同的 UIImagePickerController 实例,因为我不想在每次用户拍照时分配和销毁我的选择器。该应用程序使用一个选择器和一个名为 pictureA 的 UIImageView 来显示从 iPhone 相册中选择或使用相机拍摄的图片。
一开始我像这样分配我的选择器视图控制器:
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
[self addSubview:imagePickerController.view];
当我从选取器中拍照并将其放在我的 UIImageView 中时:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
// newImage is a UIImage do not try to use a UIImageView
UIImage *newImage = [info objectForKey:@"UIImagePickerControllerEditedImage"];
[pictureA removeFromSuperview];
CGRect myImageRect = CGRectMake(30.0f, 38.0f, 125.0f, 125.0f);
pictureA = [[UIImageView alloc] initWithFrame:myImageRect];
pictureA.contentMode= UIViewContentModeScaleAspectFit;
[pictureA setImage:newImage];
pictureA.opaque = YES;
[self addSubview:pictureA];
[newImage release];
[picker dismissModalViewControllerAnimated:YES];
[picker.view setHidden:YES];
}
当从 iphone 的图库中选择图片时:
- (void) chooseImageFromLibrary {
[imagePickerController.view setHidden:NO];
imagePickerController.allowsEditing = YES;
[imagePickerController viewWillAppear:YES];
[imagePickerController viewDidAppear:YES];
}
取消:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
[picker.view setHidden:YES];
}
- (void) takePicture {
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
[(MainScene*)[melonGame actualScene] setCameraDissabled:YES];
return;
}
[imagePickerController.view setHidden:NO];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.allowsEditing = YES;
[imagePickerController takePicture];
[imagePickerController viewWillAppear:YES];
[imagePickerController viewDidAppear:YES];
}
当我拍摄第一张照片时,该应用程序将正常工作,但当我尝试拍摄另一张照片或从我的图库中选择另一张照片时,它看起来与我上次选择一张照片时完全相同(整个屏幕中的图片和在底部选择和取消的非活动菜单)。只有当我从视图中移除控制器并在每次用户拍照时分配它时,我的应用程序才能正常工作。有没有办法“清理”或“重新启动”选择器而不释放它并将其从我的视图中删除?
我也不确定是否可以实例化一次 UIImageView (pictureA) 我存储 imagePickerController 拍摄的图像并在每次用户拍照或从相册中选择一张时对其进行修改,我怀疑它不正确每次用户拍照时销毁它并重新分配它。有什么建议吗?关于内存管理或 UIImagePickerController 和 UIImageView 的使用我做错了什么?
谢谢!
【问题讨论】:
标签: iphone uiimageview uiimagepickercontroller