iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Mobile Development

ios 的小小實驗室 2 !!系列 第 21

AVCaptureVideoPreviewLayer 6 - AVCaptureMetadataOutputObjectsDelegate 3

  • 分享至 

  • xImage
  •  

今天會介紹 使用 AVCaptureMetadataOutput 物件辨識 QRCode
前幾天介紹的 AVCaptureMetadataOutputObjectsDelegate 裡的委派方法 metadataOutout 會被呼叫

  • 定義 metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) function

    unc metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
    
    if let metadataObject = metadataObjects.first {
    
    	// AVMetadataMachineReadableCodeObject 是從 Output 擷取到 Barcode 的內容
    	guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
    
    	for subView in scanQRCodeView.subviews{
    
    		if subView.layer.name == "blackBackgroundView" {
    
    			UIView.animate(withDuration: 0.5, animations: {
    				subView.alpha = 0
    			}) { (bool) in
    
    				subView.removeFromSuperview()
    
    				// 將讀取到的內容轉成字串
    				guard let stringValue = readableObject.stringValue else { return }
    				self.qrcodeString = stringValue
    
    				// 以 Alert 的方式判別是否要開啟連結
    				self.showAlertWith(title: "", message: "\(self.qrcodeString.description)", vc: self, confirmTitle: "Yes", cancelTitle: "No", confirm: {
    
    					// 開啟連結
    					if let url = URL(string: self.qrcodeString) {
    						if self.qrcodeString.contains("http") || self.qrcodeString.contains("https") {
    							UIApplication.shared.open(url, options: [:], completionHandler: nil)
    						}
    						else {
    							let newURL = URL(string: "https://\(self.qrcodeString.description)")
    							UIApplication.shared.open(newURL!, options: [:], completionHandler: nil)
    						}
    					}
    				}, cancel: {
    					self.scanQRCodeBlackView()
    				})
    			}
    		}
    	}
    }
    
    ``
    
    

明天將會介紹 把常用的功能寫成一個方便呼叫的 function,並以 extension 的方式加在專案底下


GitHub - AVCaptureVideoPreviewLayerDemo


上一篇
AVCaptureVideoPreviewLayer 5 - AVCaptureMetadataOutputObjectsDelegate 2
下一篇
AVCaptureVideoPreviewLayer 7 - extension 常用的 function
系列文
ios 的小小實驗室 2 !!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言