Недавно я разрабатываю QR-код распознавания на iPhone. Я использую AVFoundation framework. Я использую AVCaptureSession для подключения к AVCaptureDeviceInput и AVCaptureMetadataOutput и использовать AVCaptureVideoPreviewLayer для отображения. Проблема в том, что когда AVCaptureSession startRunning, AVCaptureVideoPreviewLayer сначала становится черным и постепенно возвращается в нормальное состояние. Проблема - плохой опыт пользователей. Теперь я использую GCD dispatch_after() для решения этой проблемы временно. Я знаю, есть ли другие решения. Поскольку метод startRunning AVCaptureSession отнимает много времени, я вызываю 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];
ТНХ для ответа, я обновил вопрос. –