0

今月(2014 年 2 月)からの最新バージョンである AVCam サンプル プロジェクトを使用しています。フラッシュ選択機能を追加し、録画機能を削除しましたが、問題とは関係がないと思います。

ビューを変更し、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 に答える