Objective c iOS AVFoundation captureStillImageAsynchronouslyFromConnection:completionHandler:无限期挂起
我已经使用iOS 4和5中提供的AVFoundation框架实现了一个摄像头,但是在从未调用完成处理程序块的Objective c iOS AVFoundation captureStillImageAsynchronouslyFromConnection:completionHandler:无限期挂起,objective-c,ios,avfoundation,Objective C,Ios,Avfoundation,我已经使用iOS 4和5中提供的AVFoundation框架实现了一个摄像头,但是在从未调用完成处理程序块的captureStillImageAsynchronouslyFromConnection:completionHandler:函数中遇到了一个不一致的问题。在这种情况下,快门声音不会触发,预览将冻结 我遵循了苹果(WWDC 2010和2011视频)和非苹果指南(博客等帖子),以照片分辨率实现了静态图像捕获,几乎没有改进。在以下条件下,我能够在一定程度上始终如一地繁殖: 如果我将flas
captureStillImageAsynchronouslyFromConnection:completionHandler:
函数中遇到了一个不一致的问题。在这种情况下,快门声音不会触发,预览将冻结
我遵循了苹果(WWDC 2010和2011视频)和非苹果指南(博客等帖子),以照片分辨率实现了静态图像捕获,几乎没有改进。在以下条件下,我能够在一定程度上始终如一地繁殖:
- 如果我将flash设置为
并在微光下拍照,它将挂起,并且永远不会运行完成块。闪光灯亮起,但快门声不亮。使用相同的代码,我能够在正常光线下拍摄照片,快门声音启动,闪光灯不闪烁,完成块运行AVCaptureFlashModeAuto
- 如果我没有将
设置为off,我可以拍摄一些照片,但在少量(通常在1到5之间)后,完成块停止启动。为了澄清,一个场景可能是:flashMode
- 在确认屏幕上拍照并查看
- 返回拍摄屏幕
- 重复1和2两次
- 点击拍照,它会挂在完成块之前
- 即使在检查
时,它也会继续返回false并继续从Connection异步运行[stillImageOutput isCapturingStillImage]
函数CaptureSillImageAsynchronouslyFromConnection
- 如果我切换到另一个应用程序,锁定手机,在应用程序中执行某些其他操作,或者点击“拍照”按钮一百万次,我就能够让完成块返回错误。它们根据具体的行动而有所不同。常见的是11800、11801和11830。他们似乎与绞刑无关
- 我让我们的测试手机(iPhone4GSM)静置一个小时,看看它最终是否能正常工作。没有骰子
)我应该添加代码,它可能会帮助任何人查看此内容,但无论如何: 事实证明,相机闪光灯对处理图像所需的时间有足够大的影响,从而在异步捕获某些内容时引发问题。在从completionHandler块发送通知之前,我意外地结束了捕获会话
- (void) saveImageFromCamera {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageCapturedFromCamera) name:@"FTW_imageCaptured" object:nil];
[cameraController captureStillImage];
// WRONG: Session was stopped here before
}
- (void) imageCapturedFromCamera {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"FTW_imageCaptured" object:nil];
[sharedAppController setBackgroundImage:[cameraController stillImage]];
sharedAppController.imageFromCamera = YES;
[self endCamera];
// CORRECT: Should have stopped session here
[self updateBackgroundImage];
}
我希望这能帮助其他遇到类似情况的人