captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler并不总是被调用

时间:2012-01-05 07:54:09

标签: ios avcam

我从苹果网站下载了AVCam演示版,并试图添加一个简单的启动画面(我添加了一个StartViewController。{h,m,nib}),然后启动了AVCam演示按钮。按钮的代码如下(其他一切只是xcode创建的默认内容):

-(IBAction) btnClicked:(id) sender {
    viewController =
    [[AVCamViewController alloc]
        initWithNibName: @"AVCamViewController"
        bundle:nil];

    [UIView beginAnimations:@"flipping view" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
                       forView:self.view
                         cache:YES];
    [self.view addSubview:viewController.view];
    [UIView commitAnimations];
}

添加此笔尖后,拍摄照片并不是一直有效(有时相机胶卷中没有照片结束)。我在captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler中向captureStillImage添加了一些日志语句,并注意到此completionHandler并不总是被调用。奇怪的是它确实在某些时候起作用。我的猜测是我做错了但不确定是什么?我正在运行4.2.1的iPhone上测试它。

3 个答案:

答案 0 :(得分:2)

调用AVCaptureSession

时,请确保captureStillImageAsynchronouslyFromConnection:stillImageConnection正在运行

答案 1 :(得分:1)

好吧,我遇到了类似的问题,captureStillImageAsynchronouslyFromConnection:stillImageConnection引发了一个异常,即传递的connection无效。后来,我发现当我为会话propertiesstillImageOutPut保留值时,问题就解决了。

答案 2 :(得分:0)

对我来说,这个问题只发生在单核iPhone 4上,当我尝试使用AVCaptureSessionPresetHigh拍摄静止图像时。

我尝试了AVCaptureSessionPresetPhoto,这个问题就消失了。但我不需要全尺寸照片,所以我选择了另一种解决方案。

我在主队列中放置了captureStillImageAsynchronouslyFromConnection。像这样的东西

dispatch_async(sessionQueue) {

    // do whatever before capturing

    dispatch_async(dispatch_get_main_queue) {
        captureStillImageAsynchronouslyFromConnection {
            // do whatever after capturing
        }
    }
}

不确定为什么会出现此问题,并且不确定为何可以避免此问题。但我希望这可以帮助别人。