[swift] PMAlertController 알림창 QR코드 스캔기능 추가하기

이번 프로젝트에서는 PMAlertController를 사용하여 알림창을 구현했습니다. 이제 해당 알림창에 QR코드 스캔 기능을 추가해보도록 하겠습니다.

필수 라이브러리 설치

QR코드 스캔 기능을 구현하기 위해 AVFoundation 라이브러리를 사용해야 합니다. 따라서, 해당 라이브러리를 프로젝트에 추가해야 합니다.

Cocoapods를 사용하는 경우:

Podfile에 다음을 추가합니다.

pod 'AVFoundation'

터미널에서 다음 명령을 실행합니다.

pod install

수동 설치하는 경우:

프로젝트 내에 AVFoundation.framework 파일을 추가합니다.

QR코드 스캔 기능 추가하기

1. QR코드 스캔 버튼 추가하기

알림창에 QR코드 스캔을 위한 버튼을 추가해야 합니다.

let alert = PMAlertController(title: "알림창", description: "QR코드 스캔하세요!", image: nil, style: .alert)

let scanButton = PMAlertAction(title: "QR코드 스캔", style: .default) {
    // QR코드 스캔 기능 실행
}

alert.addAction(scanButton)

2. QR코드 스캔 기능 실행

QR코드 스캔 기능을 실행하기 위해 다음과 같이 코드를 작성합니다.

import AVFoundation

// AVCaptureSession 인스턴스 생성
let captureSession = AVCaptureSession()

// AVCaptureDevice 찾기
guard let captureDevice = AVCaptureDevice.default(for: .video) else {
    // AVCaptureDevice를 찾지 못한 경우 처리
    return
}

// AVCaptureDeviceInput 인스턴스 생성
guard let captureInput = try? AVCaptureDeviceInput(device: captureDevice) else {
    // AVCaptureDeviceInput을 생성하지 못한 경우 처리
    return
}

// AVCaptureSession에 AVCaptureDeviceInput 추가
captureSession.addInput(captureInput)

// AVCaptureMetadataOutput 인스턴스 생성
let captureMetadataOutput = AVCaptureMetadataOutput()

// AVCaptureSession에 AVCaptureMetadataOutput 추가
captureSession.addOutput(captureMetadataOutput)

// Dispatch Queue 생성
let dispatchQueue = DispatchQueue(label: "captureQueue")
captureMetadataOutput.setMetadataObjectsDelegate(self, queue: dispatchQueue)
captureMetadataOutput.metadataObjectTypes = [.qr]

// AVCaptureSession 시작
captureSession.startRunning()

3. QR코드 스캔 결과 처리

QR코드를 스캔한 후 결과를 처리해야 합니다. 이를 위해 AVCaptureMetadataOutputObjectsDelegate 프로토콜을 사용하여 다음과 같은 메서드를 구현합니다.

extension ViewController: AVCaptureMetadataOutputObjectsDelegate {
    func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
        // QR코드 데이터 처리
        if let metadataObject = metadataObjects.first as? AVMetadataMachineReadableCodeObject {
            if metadataObject.type == .qr {
                let qrCodeValue = metadataObject.stringValue
                // QR코드 데이터 사용
                print(qrCodeValue)
                // 알림창 닫기 등 원하는 동작 수행
            }
        }
    }
}

결론

위의 단계를 따라하면 PMAlertController에 QR코드 스캔 기능을 손쉽게 추가할 수 있습니다. QR코드 스캔을 통해 사용자와 더욱 쉽고 편리한 상호작용을 제공할 수 있을 것입니다.

참고 자료