0

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

提前感谢您的帮助!

4

1 回答 1

2

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

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

for(AVCaptureOutput *output in captureSession.outputs) {
    [captureSession removeOutput:output];
}
于 2014-02-27T13:43:49.913 回答