티스토리 뷰

 

 

Delegate채택을 위해서 

 

In this case, the output of the session is set to an AVCaptureMetaDataOutput object. The AVCaptureMetaDataOutput class is the core part of QR code reading. This class, in combination with the AVCaptureMetadataOutputObjectsDelegate protocol, is used to intercept any metadata found in the input device (the QR code captured by the device's camera) and translate it to a human-readable format.

 

이 extension을 채택해서, 이 세션의 output은 AVCaptureMeta

 

 

그리고 ViewController안에 이 3개의 변수를 선언해줍니다

AVCaptureSession 변수는 화면이랑, 카메라에서 찍히는거랑 똑같게 하려고? 있는 변수라고 한다.

 

 

 

QR이 real-time basis로 동영상 캡쳐로 코드를 인식하기 때문에, 

1. iOS기기가 있어야 테스트가 가능해요ㅠㅠ노트북에는 카메라가 안달려있으니까...(웹캠으로 테스트 하는 방법은 제가 몰라서ㅠ) 후면 카메라가 있는 기기를 들고와야 합니다

2. AVCaptureSession의 input을 우리가 쓸 AVCaptureDevice로 설정해주어야 합니다

 

viewDidLoad()에 이 코드를 넣어줘야 하는데, 

아...이렇게 해서 device를 설정하는 거구나

참고로 모든 available 한 장치들을 찾을 수 있다고 한다.

device type을 잘 바꾸면 웹캠으로도 될듯??

 

오...guard let 구문이다... 

카메라를 못찾았을 때 에러처리하는 부분이구나

 

 

do catch 구문도 있네 ㄷ

let input = try ~ 이런식으로 하는구나...신기....

 

guard-let과 do-catch 둘다 다음에 포스팅 해보는걸로 하고 넘어가고!!

 

viewDidLoad()안에 있는 do()블록안에 또 이걸 추가해주세요!

 

 

그럼 이렇게 되겠죠??

 

그리고, 델리게이트를 채택하기 위해서 captureMetadataOut의 delegate로 self를 지정해줍니다! 

콜백을 시행하기 위해서 default dispatch queue를 쓸거라고 하는데 이 부분은 아직 잘 모르겠네요.

 

dispatch queue는 serial하거나 concurrent할 수 있다. 애플의 문서에 의하면, queue는 무조건 serial queue여야 한다고 한다. 그래서 DispatchQueue.main을 써서 default serial queue를 쓴거라고 한다.

 

 

metadataObjectTypes도 꽤 중요하다. 왜냐면 이 부분에서 우리가 쓰는 타입이 무슨 meta data인지 보기 때문이다.

AVMetadataObject.ObjectType.qr이라고 쓰면 우리가 QR코드를 다루고 있다는걸 알게 된다!

 

여기까지 AVCaptureMetadataOutput을 다 다뤘으니까, QR을 찍을 때 비디오를 보여주는 부분을 구현하면 된다. AVCaptureVideoPreviewLayer을 이용하는데, CALayer을 쓰면 된다고 한다. 

 

 

do-catch 부분에 이 코드를 넣어주자!

 

 

 

 

 

이제 될 줄 알았는데, 폰 연결해서 해봐도 안되고 계속 'process launch failed:Unspecified'라는 에러가 나오더라고요!

 

iOS어플은 카메라를 키기 전에 유저 퍼미션을 요구하므로, Info.plist에 NSCameraUsageDescription을 추가해줘야 해요!

 

Privacy- Camera Usage Description에 내용을 추가해줍니다.

 

 

(흑..왜 안되지...여전히 안됨)

 

 

 

여기까지 여차저차 했으면 이제 QRCodeReading을 구현해볼게여

어케 할거냐면, 

1. QR코드가 감지가 되면 초록색 박스로 하이라이팅 하기

2. 그렇게 하면 QR코드가 decode되고, decode된 정보가 화면 아래쪽에 뜬다

 

 

1부터 만들어볼게요!

박스를 만들기 위해서 UIView를 하나 생성하고, 테두리를 초록색으로 지정할게요.

viewDidLoad()안의 do블록 안에다가 이 코드를 넣어보자

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함