UIImagePickerController 相机未将照片保存在照片库中

Posted

技术标签:

【中文标题】UIImagePickerController 相机未将照片保存在照片库中【英文标题】:UIImagePickerController Camera Not saving Photos in Photo Library 【发布时间】:2013-01-03 07:39:45 【问题描述】:

以前有人遇到过这个问题吗?我正在使用UIImagePickerController 相机通过我的应用程序拍照,我注意到照片在拍摄后没有存储在照片库中。我已经在 iPhone4 的 ios5 和 iPhone5 的 iOS6 上尝试过,结果相同。这是我的设置方式:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])

    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;


imagePickerController.delegate = self;
[self.navigationController presentModalViewController:imagePickerController animated:YES];
[imagePickerController release];

似乎 UIImagePickerController 应该隐式保存拍摄到用户照片库的照片?任何帮助将不胜感激。

【问题讨论】:

你好@CoDEFRo 我最近编辑了我的答案,请尝试一下。 【参考方案1】:

试试下面的代码。

-(IBAction)useCamera

 if ([UIImagePickerController isSourceTypeAvailable:
      UIImagePickerControllerSourceTypeCamera])
 
  UIImagePickerController *imagePicker =
  [[UIImagePickerController alloc] init];
  imagePicker.delegate = self;
  imagePicker.sourceType =
  UIImagePickerControllerSourceTypeCamera;
  imagePicker.mediaTypes = [NSArray arrayWithObjects:
                            (NSString *) kUTTypeImage,
                            nil];
  imagePicker.allowsEditing = NO;
  [self presentViewController:imagePicker animated:YES completion:nil];
  newMedia = YES;
 


#pragma mark- camera picker delegate methods

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

 NSString *mediaType = [info
                        objectForKey:UIImagePickerControllerMediaType];

 [self dismissViewControllerAnimated:YES completion:nil];

 if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) 
  UIImage *image = [info
                    objectForKey:UIImagePickerControllerOriginalImage];

  [imageView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth)];
  imageView.image = image;
  if (newMedia)
   UIImageWriteToSavedPhotosAlbum(image,
                                  self,
                                  @selector(image:finishedSavingWithError:contextInfo:),
                                  nil);
 
 else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
 
  // Code here to support video if enabled
 


-(void)image:(UIImage *)image
finishedSavingWithError:(NSError *)error
 contextInfo:(void *)contextInfo

 if (error) 
  UIAlertView *alert = [[UIAlertView alloc]
                        initWithTitle: @"Save failed"
                        message: @"Failed to save image"\
                        delegate: nil
                        cancelButtonTitle:@"OK"
                        otherButtonTitles:nil];
  [alert show];
 

从相机中挑选照片并将其存储到 ImageView 并调用 save 方法将其保存到相机胶卷。 希望这会有所帮助

【讨论】:

感谢您的回复。那么,UIImagePickerController 的相机不会将照片隐式保存到您的照片库中吗?这对我来说似乎不正确。 不,您必须自己添加这些方法(上面的代码似乎正确)。调用UIImageWriteToSavedPhotosAlbum 是实际保存到照片库的部分。 @RicardoRendonCepeda - 谢谢。那么 UIImagePickerControllerSourceTypeCamera 应该或不应该返回刚刚拍摄的照片的资产吗?因为我的问题不是照片不在库中,而是资产由于某种原因返回 nil,我无法从中提取缩略图,也无法使用它来异步加载图像。 sourceType 只是定义你的图像选择器从哪里获取它的媒体。上面的代码检查设备是否有摄像头,然后继续启动使用摄像头的图像选择器对象。如果它返回 nil,那么这意味着它没有检测到设备上的摄像头。 @RicardoRendonCepeda - 感谢您的回复。抱歉,我实际上是指 UIImagePickerControllerReferenceURL。

以上是关于UIImagePickerController 相机未将照片保存在照片库中的主要内容,如果未能解决你的问题,请参考以下文章

在iPad iOS8环境下打开相冊或者拍照

SVG 覆盖在 UIImagePickerController 之上,UIImagePickerController 响应手势(iPhone/iOS)

UIImagePickerController 不是全屏

UIImagePickerController、自定义 UIButton 和 AutoLayout

UIImagePickerController 实况照片

OCMock 模拟 UIImagePickerController