2

我有一个 iPhone 应用程序,它调用 UIImagePickerController 为人们提供通过相机或手机上的照片库选择图像之间的选择。问题是有时(不能总是让它复制。)应该由 didFinishPickingImage 委托消息返回的editingInfo字典对象返回空白或(null)。有没有其他人见过这个?

我在 .h 文件中实现 UIImagePickerControllerDelegate,并且正确实现了两个委托方法:didFinishPickingImage 和 imagePickerControllerDidCancel。

任何帮助将不胜感激。先感谢您!

这是我的代码...

我的 .h 文件:

@interface AddPhotoController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
  IBOutlet UIImageView *imageView;
  IBOutlet UIButton *snapNewPictureButton;
  IBOutlet UIButton *selectFromPhotoLibraryButton;
}
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UIButton *snapNewPictureButton;
@property (nonatomic, retain) UIButton * selectFromPhotoLibraryButton;

我的 .m 文件:

@implementation AddPhotoController
@synthesize imageView, snapNewPictureButton, selectFromPhotoLibraryButton;

- (IBAction)getCameraPicture:(id)sender 
{

  UIImagePickerController *picker = [[UIImagePickerController alloc] init];
  picker.delegate = self;
  picker.sourceType = UIImagePickerControllerSourceTypeCamera;
  picker.allowsImageEditing = YES;

[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{
NSLog(@"Image Meta Info.: %@",editingInfo);

UIImage *selectedImage = image;
imageView.image = selectedImage;
self._havePictureData = YES;
[self.useThisPhotoButton setEnabled:YES];

[picker dismissModalViewControllerAnimated:YES];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{
  [picker dismissModalViewControllerAnimated:YES];
}
4

2 回答 2

6

我解决了这个问题。我在这里发布我的答案,希望它可以帮助处于类似情况的其他人:

1. 弃用的方法

UIImagePickerController 方法:

– imagePickerController:didFinishPickingImage:editingInfo:

在 iPhone OS 的 v3.0 中已弃用。所以即使我使用 SDK v2.2.1 构建了应用程序,因为应用程序将在 3.0 设备上运行,我需要使用新的和改进的方法:

- imagePickerController:didFinishPickingMediaWithInfo:editingInfo

2. 关闭 ModalView

从库中选择图片或使用内置相机拍照后,您必须做的第一件事是关闭选取器的模态视图窗口。之后,您可以执行任何图像处理例程。这是该方法的最终代码:

- (void) imagePickerController:(UIImagePickerController *)thePicker didFinishPickingMediaWithInfo:(NSDictionary *)imageInfo 
{
  [thePicker dismissModalViewControllerAnimated:YES];
  UIImage *img = [imageInfo objectForKey:@"UIImagePickerControllerEditedImage"];
  previewImage.image = nil;
  self.previewImage.image = img;

  NSData *imageData = UIImagePNGRepresentation(img);
  if ([imageData length] > 0) {

    [self archivePictureData:imageData];
    self._havePictureData = YES;

    [self.useThisPhotoButton setEnabled:YES];   
  }

}

我希望这对需要它的人有所帮助。

谢谢,

L.

于 2009-08-29T06:01:40.913 回答
0

我知道了 !

我不知道为什么,但我在 appDelegate 中评论了一行:“[window makeKeyAndVisible]”

我只是将它分解并重新构建。所以 ImagePicker 的 Edit 函数现在运行。

我希望这会有所帮助。

卢库卢

于 2010-04-09T14:22:02.307 回答