今月(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 秒ほどかかる場合がある理由がわかりません。
助けてくれてありがとう!