2017-09-03 8 views
1

아래 함수를 사용하여 metadataObject을 얻은 다음 서버에 게시합니다. 그것의 0 나머지 부분에 도달하면신속한 타이머로 QRScanner를 구현하는 방법은 무엇입니까?

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) 

지금은 사용자가 QR 코드를 스캔하기 시작 그렇게 할 때 QR-스캐너에 타이머 (카운터)를 추가 할 수는, 타이머 (3부터) 카운트 다운 시작 코드 (서버에 메타 데이터 게시)가 실행됩니다.

위의 함수에 self.setTimer()을 넣었지만 captureSession.stop()이 즉시 호출되고 Scanner는 Timer가 계산을 마칠 때까지 기다리지 않습니다.

어떻게 처리 할 수 ​​있습니까?

답변

0

글쎄 대답을 찾았습니다. captureOutput 함수가 한 번 호출되도록 플래그를 사용합니다 (이 방법은 self.setTimer()이 여러 번 호출되지 않습니다).

그런 다음 captureSession을 중지하고 타이머가 카운트 다운 완료되면 다음 삼초 후 코드 (서버에 대한 메타 데이터를 게시)의 나머지 부분을 실행
DispatchQueue.main.asyncAfter(deadline: .now()+3, execute: { 

을 사용했다.

이제 스캐너가 실행되고 QR-Code이 감지되면 타이머가 실행되고 나머지 코드는 3 초 후에 실행됩니다.