最近、私はiPhoneでQRコード認識を開発しています。私はAVFoundationフレームワークを使用します。 AVCaptureDeviceInputとAVCaptureMetadataOutputに接続し、AVCaptureVideoPreviewLayerを使用して表示するには、AVCaptureSessionを使用します。 問題は、AVCaptureSession startRunning、AVCaptureVideoPreviewLayerが最初に黒になり、徐々に正常に戻ります。問題はユーザーエクスペリエンスが悪いです。今私はこの問題を一時的に解決するためにGCDのdispatch_after()を使います。私は他の解決策があることを知っています。 AVCaptureSessionのstartRunningメソッドは時間がかかるため、バックグラウンドスレッドでstartRunning()を呼び出します。私は、AVCaptureSessionが開始するのをユーザーが待つようにするために、読み込みビューを使用します。私は "AVCaptureSessionDidStartRunningNotification"通知を観察します。しかし、通知がAVCaptureVideoPreviewLayerをまだ黒にしていて、徐々に正常に戻ったとき。AVCaptureSession startRunningはAVCaptureVideoPreviewLayerを最初に黒にします
dispatch_async(self.sessionQueue, ^{
[_avSession startRunning];
CGRect rectOfInterest = [_previewLayer metadataOutputRectOfInterestForRect:_config.rectOfInterest];
_metadataOutput.rectOfInterest = rectOfInterest;
}
}
});
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(avSessionDidStartRunning) name:AVCaptureSessionDidStartRunningNotification object:nil];
thxについては、私は質問を更新しました。 –