Xcode,swiftでQRコードを読み込むアプリを現在開発中です
下記のリンクをのコードを参考にさせていただきましたが、そのまま使用すると全画面がカメラ出力になってしまいます。
画像の灰色の部分でのみ表示させたいです。
swift初心者なので定かではないのですが、UIViewを宣言し、
let previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
この辺りをいじればいけるのでは?と調べましたがわかりませんでした。
御教授の程よろしくお願いいたします
swift
1import Foundation 2import AVFoundation 3import UIKit 4 5class CameraViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 6 7 // カメラやマイクの入出力を管理するオブジェクトを生成 8 private let session = AVCaptureSession() 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 // Do any additional setup after loading the view, typically from a nib. 13 14 // カメラやマイクのデバイスそのものを管理するオブジェクトを生成(ここではワイドアングルカメラ・ビデオ・背面カメラを指定) 15 let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], 16 mediaType: .video, 17 position: .back) 18 19 // ワイドアングルカメラ・ビデオ・背面カメラに該当するデバイスを取得 20 let devices = discoverySession.devices 21 22 // 該当するデバイスのうち最初に取得したものを利用する 23 if let backCamera = devices.first { 24 do { 25 // QRコードの読み取りに背面カメラの映像を利用するための設定 26 let deviceInput = try AVCaptureDeviceInput(device: backCamera) 27 28 if self.session.canAddInput(deviceInput) { 29 self.session.addInput(deviceInput) 30 31 // 背面カメラの映像からQRコードを検出するための設定 32 let metadataOutput = AVCaptureMetadataOutput() 33 34 if self.session.canAddOutput(metadataOutput) { 35 self.session.addOutput(metadataOutput) 36 37 metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) 38 metadataOutput.metadataObjectTypes = [.qr] 39 40 // 背面カメラの映像を画面に表示するためのレイヤーを生成 41 let previewLayer = AVCaptureVideoPreviewLayer(session: self.session) 42 previewLayer.frame = self.view.bounds 43 previewLayer.videoGravity = .resizeAspectFill 44 self.view.layer.addSublayer(previewLayer) 45 46 // 読み取り開始 47 self.session.startRunning() 48 } 49 } 50 } catch { 51 print("Error occured while creating video device input: (error)") 52 } 53 } 54 } 55 56 override func didReceiveMemoryWarning() { 57 super.didReceiveMemoryWarning() 58 // Dispose of any resources that can be recreated. 59 } 60 61 func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) { 62 for metadata in metadataObjects as! [AVMetadataMachineReadableCodeObject] { 63 // QRコードのデータかどうかの確認 64 if metadata.type != .qr { continue } 65 66 // QRコードの内容が空かどうかの確認 67 if metadata.stringValue == nil { continue } 68 69 /* 70 このあたりで取得したQRコードを使ってゴニョゴニョする 71 読み取りの終了・再開のタイミングは用途によって制御が異なるので注意 72 以下はQRコードに紐づくWebサイトをSafariで開く例 73 */ 74 75 // URLかどうかの確認 76 if let url = URL(string: metadata.stringValue!) { 77 // 読み取り終了 78 self.session.stopRunning() 79 // QRコードに紐付いたURLをSafariで開く 80 UIApplication.shared.open(url, options: [:], completionHandler: nil) 81 82 break 83 } 84 } 85 } 86}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。