250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- CSS
- 개발자
- front-end
- 자바스크립트
- iPhone
- SWIFT
- 풀스택
- javascript
- 프론트엔드
- 비전공자
- jQuery
- hover
- xcode
- MAC
- 애니메이션
- keyframes
- IOS
- ipad
- react
- 비전공 개발자
- php
- css3
- iOS 개발자
- Animation
- button
- html5
- 백엔드
- effect
- HTML
- image
Archives
- Today
- Total
비전공자 개발일기
QR Code Scanner Example 본문
728x90
SMALL
import UIKit
import AVFoundation
import QRCodeReader
class ViewController: UIViewController, QRCodeReaderViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
print("")
print("===============================")
print("[ViewController >> viewDidLoad() :: 액티비티 메모리 로드 실시]")
print("===============================")
print("")
self.checkCameraPermission()
}
// MARK: [액티비티 뷰 화면 표시 실시]
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("")
print("===============================")
print("[ViewController >> viewDidAppear() :: 뷰 화면 표시]")
print("===============================")
print("")
// [권한 설정 퍼미션 확인 실시]
if permissionNoArray.count > 0 && permissionNoArray.isEmpty == false {
showAlert(tittle: "[알림]", content: "카메라 권한이 비활성 상태입니다.", okBtb: "확인", noBtn: "")
permissionNoArray.removeAll()
}
else {
// [권한 허용 상태]
// [QR 스캔 시작 메소드 호출 실시]
self.callQrScanStart()
}
}
// MARK: [퍼미션 인증 거부된 권한을 담는 배열]
var permissionNoArray : Array<String> = []
// MARK: [카메라 권한 인증 확인 메소드]
/*
[카메라 권한 요청]
필요 : import AVFoundation
*/
func checkCameraPermission() {
print("")
print("===============================")
print("[ViewController >> checkCameraPermission() :: 카메라 권한 요청 실시]")
print("===============================")
print("")
AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
print("")
print("===============================")
print("[ViewController >> checkCameraPermission() :: 카메라 권한 허용 상태]")
print("===============================")
print("")
} else {
print("")
print("===============================")
print("[ViewController >> checkCameraPermission() :: 카메라 권한 거부 상태]")
print("===============================")
print("")
self.permissionNoArray.append("카메라")
}
})
}
// MARK: [QR 객체 초기화 수행 실시]
lazy var readerVC: QRCodeReaderViewController = {
let builder = QRCodeReaderViewControllerBuilder {
$0.reader = QRCodeReader(metadataObjectTypes: [.qr], captureDevicePosition: .back)
// [QR 스캔 뷰 컨트롤러 구성 실시]
$0.showTorchButton = false
$0.showSwitchCameraButton = true // 화면 전환 버튼 표시 여부
$0.showCancelButton = true // 취소 버튼 표시 여부
$0.showOverlayView = true
$0.rectOfInterest = CGRect(x: 0.2, y: 0.2, width: 0.6, height: 0.6)
}
return QRCodeReaderViewController(builder: builder)
}()
// MARK: [QR 코드 스캔 시작 실시]
func callQrScanStart(){
print("")
print("===============================")
print("[ViewController >> callQrScanStart() :: QR 스캔 시작 실시]")
print("===============================")
print("")
// [QR 패턴 사용 실시]
self.readerVC.delegate = self
// [클로저 사용 실시]
self.readerVC.completionBlock = { (result: QRCodeReaderResult?) in
print("")
print("===============================")
print("[ViewController >> callQrScanStart() :: QR 스캔 결과 확인 실시]")
print("result : ", result?.value ?? "")
print("===============================")
print("")
}
// [readerVC를 모달 양식 시트로 표시]
self.readerVC.modalPresentationStyle = .formSheet
//self.readerVC.modalPresentationStyle = .fullScreen
self.present(self.readerVC, animated: true, completion: nil)
}
// MARK: [QRCodeReaderViewController 대리자 메소드]
func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
print("")
print("===============================")
print("[ViewController >> reader() :: QR 스캔 종료 실시]")
print("===============================")
print("")
reader.stopScanning() // 스캔 중지
self.dismiss(animated: true, completion: nil) // 카메라 팝업창 없앰
}
// MARK: [카메라 전환 버튼 이벤트 확인]
func reader(_ reader: QRCodeReaderViewController, didSwitchCamera newCaptureDevice: AVCaptureDeviceInput) {
let cameraName = String(newCaptureDevice.device.localizedName)
print("")
print("===============================")
print("[ViewController >> reader() :: 카메라 전환 버튼 이벤트 확인]")
print("cameraName : ", cameraName)
print("===============================")
print("")
}
// MARK: [QR 스캔 종료 실시]
func readerDidCancel(_ reader: QRCodeReaderViewController) {
print("")
print("===============================")
print("[ViewController >> readerDidCancel() :: QR 스캔 취소 실시]")
print("===============================")
print("")
reader.stopScanning() // 스캔 중지
self.dismiss(animated: true, completion: nil) // 카메라 팝업창 없앰
}
// MARK: [alert 팝업창 호출 메소드 정의 실시 : 이벤트 호출 시]
// 호출 방법 : showAlert(tittle: "title", content: "content", okBtb: "확인", noBtn: "취소")
func showAlert(tittle:String, content:String, okBtb:String, noBtn:String) {
// [UIAlertController 객체 정의 실시]
let alert = UIAlertController(title: tittle, message: content, preferredStyle: UIAlertController.Style.alert)
// [인풋으로 들어온 확인 버튼이 nil 아닌 경우]
if(okBtb != "" && okBtb.count>0){
let okAction = UIAlertAction(title: okBtb, style: .default) { (action) in
// [확인 버튼 클릭 이벤트 내용 정의 실시]
return
}
alert.addAction(okAction) // 버튼 클릭 이벤트 객체 연결
}
// [인풋으로 들어온 취소 버튼이 nil 아닌 경우]
if(noBtn != "" && noBtn.count>0){
let noAction = UIAlertAction(title: noBtn, style: .default) { (action) in
// [취소 버튼 클릭 이벤트 내용 정의 실시]
return
}
alert.addAction(noAction) // 버튼 클릭 이벤트 객체 연결
}
// [alert 팝업창 활성 실시]
present(alert, animated: false, completion: nil)
}
}
728x90
LIST
'SWIFT' 카테고리의 다른 글
Dark Mode(Light Mode) 고정하기(무시하기) (0) | 2023.02.22 |
---|---|
Webview (Local html) (0) | 2023.02.21 |
Random Chinese character Generator (0) | 2023.01.29 |
Memo App made by SwiftUI (0) | 2023.01.17 |
Log Out (0) | 2023.01.16 |