IOS 프로그래밍

본문 바로가기
사이트 내 전체검색


IOS 프로그래밍
IOS 프로그래밍

1. QR code scanner

페이지 정보

작성자 관리자 댓글 0건 조회 5,612회 작성일 19-12-20 13:33

본문

1. QR code scanner

File name : ViewController.swift


import UIKit



class ViewController: UIViewController, sendBackDelegate  {

    

    @IBOutlet weak var qrCode: UITextField!


    override func viewDidLoad() {

        super.viewDidLoad()

        

        qrCode.delegate = self

    }


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // if seque.identifier == "scan" {

        if segue.destination is QRScannerViewController {

            let vc = segue.destination as! QRScannerViewController

            //vc?.tag_id = self.tth_id.text

            vc.delegate = self

            

        }

    }


    func dataReceived(data: String) {

        qrCode.text = data

        

    }

}


File name : QRScannerViewController.swift


//

//  QRScannerViewController.swift

//  FoodChainReader

//

//  Created by macmini on 2019/11/10.

//  Copyright © 2019 foodchain. All rights reserved.

//


import UIKit

import AVFoundation


protocol sendBackDelegate {

    func dataReceived(data: String)

    

}

class QRScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

    var captureSession: AVCaptureSession!

    var previewLayer: AVCaptureVideoPreviewLayer!

    

    var data = ""

    var delegate : sendBackDelegate?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        view.backgroundColor = UIColor.black

        captureSession = AVCaptureSession()

        

        guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }

        let videoInput: AVCaptureDeviceInput

        

        do {

            videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)

        } catch {

            return

        }

        

        if (captureSession.canAddInput(videoInput)) {

            captureSession.addInput(videoInput)

        } else {

            failed()

            return

        }

        

        let metadataOutput = AVCaptureMetadataOutput()

        

        if (captureSession.canAddOutput(metadataOutput)) {

            captureSession.addOutput(metadataOutput)

            

            metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)

            metadataOutput.metadataObjectTypes = [.qr]

        } else {

            failed()

            return

        }

        

        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

        previewLayer.frame = view.layer.bounds

        previewLayer.videoGravity = .resizeAspectFill

        view.layer.addSublayer(previewLayer)

        

        captureSession.startRunning()

    }

    

    func failed() {

        let ac = UIAlertController(title: "Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.", preferredStyle: .alert)

        ac.addAction(UIAlertAction(title: "OK", style: .default))

        present(ac, animated: true)

        captureSession = nil

    }

    

    override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        

        if (captureSession?.isRunning == false) {

            captureSession.startRunning()

        }

    }

    

    override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        

        if (captureSession?.isRunning == true) {

            captureSession.stopRunning()

        }

    }

    

    func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {

        captureSession.stopRunning()

        

        if let metadataObject = metadataObjects.first {

            guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }

            guard let stringValue = readableObject.stringValue else { return }

            AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))

            found(code: stringValue)

        }

        

        dismiss(animated: true)

    }

    

    func found(code: String) {

        print(code)

        delegate?.dataReceived(data: code)

        dismiss(animated: true, completion: nil)

    }

    

    override var prefersStatusBarHidden: Bool {

        return true

    }

    

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {

        return .portrait

    }

    

    

    /*

     // MARK: - Navigation

     

     // In a storyboard-based application, you will often want to do a little preparation before navigation

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

     // Get the new view controller using segue.destination.

     // Pass the selected object to the new view controller.

     

     

     }

     */

    

}


댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.