しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swiftでバーコードを読み取ってみる

Swiftでバーコードを読み取る方法についてです。
取得はAppleが用意しているライブラリAVFoundationを使って行います。

まずはプロジェクトにAVFoundationを追加します。

f:id:llcc:20160514151826p:plain

ViewControllerのコードは以下のようにします。
アプリを起動するとカメラが立ち上がり、バーコードを読み込んだタイミングでdelegateメソッドであるcaptureOutput:didOutputMetadataObjects:fromConnectionが呼ばれます。

class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
    let session = AVCaptureSession()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        let input = try? AVCaptureDeviceInput(device: device)
        session.addInput(input)
        
        let output = AVCaptureMetadataOutput()
        output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
        session.addOutput(output)
        output.metadataObjectTypes = output.availableMetadataObjectTypes
        
        let layer = AVCaptureVideoPreviewLayer(session: session)
        layer.frame = view.bounds
        layer.videoGravity = AVLayerVideoGravityResizeAspectFill
        view.layer.addSublayer(layer)
        
        session.startRunning()
    }
    
    func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
        
        print(metadataObjects.flatMap { $0.stringValue })
    }
}