带有 UIImagePickerController 和 AVFoundation 的自定义相机

Posted

技术标签:

【中文标题】带有 UIImagePickerController 和 AVFoundation 的自定义相机【英文标题】:Custom camera with UIImagePickerController and AVFoundation 【发布时间】:2013-11-19 08:25:49 【问题描述】:

我的应用上有一个自定义摄像头。我在相机视图上添加了一个按钮,以便用户可以根据需要从相册中选择图像。一旦他们选择了一张图片,他们就会将它裁剪成一个正方形,然后到达编辑屏幕。我遇到的问题是一旦用户裁剪图像并点击“完成”,它就会回到相机而不是进入编辑屏幕。 这是我的代码:

- (void)viewDidLoad
  [super viewDidLoad];
  if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    //isAlbum = NO;
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    NSData *data = [def objectForKey:@"imageData"];
    if([NSStringFromClass([data class]) isEqualToString:@"NSData"])
        [self performSeague];
    
//    [self.view sendSubviewToBack:self.cameraView];
    // Do any additional setup after loading the view, typically from a nib.
    [self setupAVCapture];
    [self setLatestPicture];
    [_AlbumView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
    [_AlbumView.layer setBorderWidth:2.0];
    [overlayView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"cameraOverlay.png"]]];
    [self.view bringSubviewToFront:overlayView];
  
  else
      [self performSeague];
  

[self performSeague] 转到 UIImagePickerController(不同的控制器)。这是它的委托代码

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  UIImage *image = [info valueForKey:UIImagePickerControllerEditedImage];
  NSData *data = [[NSData alloc]init];
  data = UIImagePNGRepresentation(image);
  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  [defaults setObject:data forKey:@"imageData"];

  [self performSegueWithIdentifier:@"pictureSelectedSeague" sender:self];


  
 -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
     [self dismissViewControllerAnimated:NO completion:^
     [self performSegueWithIdentifier:@"cancelSeage" sender:self];
   ];

  

在这里,如果用户取消,我继续回到相机并且它可以工作,但是当用户完成选择编辑后的图像时,而不是遵循 [self performSegueWithIdentifier:@"pictureSelectedSeague" sender:self]; 这行代码,它会关闭选择器并返回相机查看。

【问题讨论】:

【参考方案1】:

使用以下代码在 didFinishPickingMediaWithInfo 方法中关闭 imagepicker 模型视图[picker dismissModalViewControllerAnimated:NO];

【讨论】:

同样的结果。 dismissModalViewControllerAnimated: 已被弃用。

以上是关于带有 UIImagePickerController 和 AVFoundation 的自定义相机的主要内容,如果未能解决你的问题,请参考以下文章

ViewController 生命周期 UINavigationController

如何从 webview 使用 UIImagePickerController

iPhone OS 3.0 中的 UIImagePickerController

iOS开发——打开手机相册,获取图片

如何使用 iphone 中的核心数据将图像存储到 sqlite? [复制]

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName