AVCamPreviewView初始化很慢,有时会在关闭/重新打开视图后导致崩溃 - 使用AVCam示例项目

时间:2014-02-17 14:04:30

标签: ios cocoa-touch avcam

我正在使用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秒才能显示。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在[[self session] stopRunning]之后,在viewDidDisappear方法中添加以下内容;为我解决了这个问题:

for(AVCaptureInput *input in captureSession.inputs) {
    [captureSession removeInput:input];
}

for(AVCaptureOutput *output in captureSession.outputs) {
    [captureSession removeOutput:output];
}