我正在使用AVCam示例项目,这是本月初(2014年2月)的最新版本。我添加了闪光灯选择功能并删除了录制功能,但我认为这与此问题无关。
当更改视图并连续多次重新打开AVCam视图时,应用程序会崩溃,或者预览视图需要很长时间才能初始化(~15秒)。这有时只会发生。
我认为问题与更改视图时的清理有关,但该示例具有看起来彻底清理的内容:
- (void)viewDidDisappear:(BOOL)animated
{
dispatch_async([self sessionQueue], ^{
[[self session] stopRunning];
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVCaptureDeviceSubjectAreaDidChangeNotification object:[[self videoDeviceInput] device]];
[[NSNotificationCenter defaultCenter] removeObserver:[self runtimeErrorHandlingObserver]];
[self removeObserver:self forKeyPath:@"sessionRunningAndDeviceAuthorized" context:SessionRunningAndDeviceAuthorizedContext];
[self removeObserver:self forKeyPath:@"stillImageOutput.capturingStillImage" context:CapturingStillImageContext];
[self removeObserver:self forKeyPath:@"movieFileOutput.recording" context:RecordingContext];
});
}
这是我更改视图的代码(同时发送捕获的图像)(我正在使用故事板模式操作加载视图):
-(void)dealWithNewImage:(UIImage*)imageIn {
[self saveCamState];
//change view and send us the image
UIStoryboard *storyboard = self.storyboard;
DrawingController *drawView = (DrawingController *)[storyboard instantiateViewControllerWithIdentifier:@"DrawingView"];
drawView.imageIn = imageIn;
[self presentViewController:drawView animated:NO completion:nil];
}
我不知道导致崩溃的原因以及为什么有时相机预览需要大约15秒才能显示。
提前感谢您的帮助!
答案 0 :(得分:2)
在[[self session] stopRunning]之后,在viewDidDisappear方法中添加以下内容;为我解决了这个问题:
for(AVCaptureInput *input in captureSession.inputs) {
[captureSession removeInput:input];
}
for(AVCaptureOutput *output in captureSession.outputs) {
[captureSession removeOutput:output];
}