在IOS中自动捕获图片

时间:2013-10-21 21:31:19

标签: ios ios-camera

我的要求是编写一个自动捕获相机图片的示例IOS应用程序。使用提供的各种S.O链接,我确实实现了以下代码 -

我的CameraViewController.h类定义如下:

@interface CameraViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@property (strong, nonatomic) IBOutlet UIImageView *ImageView;

@end

CameraViewController.m具有以下代码:

    -(void)viewDidAppear:(BOOL)animated
{
    NSLog(@"Setting the background now");

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
    picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    picker.showsCameraControls = NO;
    picker.navigationBarHidden = NO;
    picker.toolbarHidden = NO;
    [self presentViewController:picker animated:YES completion:NULL];

    NSLog(@"Taking the picture now");
   [picker takePicture];


}


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

{
    NSLog(@"Entered the case of finishing pictures");
}

- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker
{
    NSLog(@"Entered the case of cancel");

}

以上代码的作用是成功启动相机应用程序,但我不确定takePicture API是否能够成功点击图片。我在Ipad内的照片应用程序中看不到任何已保存的图片,所以我认为图片没有被点击。 有人可以告诉我,如果上面的代码是正确的,或者我需要做什么来在显示相机控件后自动点击捕获按钮

3 个答案:

答案 0 :(得分:2)

[请转到Apple文档中的'使用UIImagePickerController选择图片和拍照',以获取完成所需内容的完整示例应用程序,以及更多内容cameraOverlayView。 ]

您已将UIImagePickerController指定为采用CameraViewController协议,因此您必须实施两条消息:

UIImagePickerControllerDelegate

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

正如iOS文档所述,- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker; 有一个键NSDictionary* info,它将返回UIImagePickerControllerOriginalImage。访问它像:

UIImage

由于您的计划是使用UIImage *snapshot = (UIImage *) [info objectForKey: UIImagePickerControllerOriginalImage]; 自动拍摄照片(无用户互动),请务必指定

takePicture

答案 1 :(得分:1)

您需要实现UIImagePIckerControllerDelegate的imagePickerController:didFinishPickingMediaWithInfo:方法。

之后,查看mediaInfo字典,里面有一个可以使用的UIImage。

答案 2 :(得分:0)

我知道这是旧的,但使用计时器(参见接受的答案中的注释)的更好的替代方法是实现完成处理程序而不是传入NULL。

[self presentViewController:picker animated:YES completion:^{
    NSLog(@"Taking the picture now");
    [picker takePicture];
}];

这样,每次拍摄的照片都是一致的,你不会浪费时间增加不必要的延迟。