0

我正在使用以下代码从 IPAD 前置摄像头自动拍照:

UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init];
        imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera;
        imgPkr.delegate = self;

        imgPkr.cameraDevice=UIImagePickerControllerCameraDeviceFront;
        [self presentModalViewController:imgPkr animated:YES];
        imgPkr.showsCameraControls = NO;
        [imgPkr takePicture];

但是这段代码不要拍任何照片,也不要调用委托:

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

知道代码有什么问题

4

3 回答 3

4

我的第一个猜测是[imgPkr takePicture];在选择器完成呈现之前被调用。试试这样:

UIImagePickerController *imgPkr = [[UIImagePickerController alloc] init];
        imgPkr.sourceType = UIImagePickerControllerSourceTypeCamera;
        imgPkr.delegate = self;

        imgPkr.cameraDevice=UIImagePickerControllerCameraDeviceFront;
        [self presentModalViewController:imgPkr animated:YES];
        imgPkr.showsCameraControls = NO;
        [self performSelector:@selector(takePicture) withObject:self afterDelay:1.0];

或者

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(takePicture)
                                             name:AVCaptureSessionDidStartRunningNotification 

object:nil];

&

- (void)takePicture
{
    [imgPkr takePicture];
}
于 2012-07-18T12:33:47.503 回答
2

我敢打赌,您在日志中会收到一条消息,说

UIImagePickerController:忽略拍照请求;相机还没有准备好。

这是一个常见问题,因为底层捕获会话需要一些时间才能启动,因此您只需确保相机已准备好拍照,然后调用takePicture方法。现在,在我的回答中详细解释了一种获取通知的方法: 如何知道 iPhone 相机是否准备好拍照? 请注意,尽管此方法适用于 iOS5+(旧版本中有一个错误会阻止此事件的系统通知,这与文档中的描述相反)。我希望这个对你有用。

于 2012-07-18T12:34:11.723 回答
0

等待相机准备好直到拍照的另一种方法是完成块->

[self presentViewController:imagePicker animated:YES
                 completion:^ {
                     [imagePicker takePicture];
                 }];

感谢 iOS 的“GrandSteph”以编程方式拍照

于 2014-07-23T17:28:43.730 回答