首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 二維碼掃描功能:系統相冊識別、燈光控制、第三方庫集成方案

     編輯:程式設計綜合問答

需求

App 內掃碼:支持相冊選圖識別、手電筒輔助、外部掃碼槍兼容。求 Demo/庫推薦。

推薦方案:原生 AVFoundation + 成熟開源庫

1. 核心框架:AVFoundation (iOS 7+)

  • AVCaptureSession + AVCaptureMetadataOutput 實時掃描。
  • 支持 QR Code、EAN-13、Code 128 等主流格式。
  • 代碼量約 50 行可構建完整掃描頁面。

2. 開源庫(封裝好 UI/權限/相冊選圖)

3. 相冊選圖識別核心代碼

// 1. 打開相冊
let picker = UIImagePickerController()
picker.sourceType = .photoLibrary
picker.delegate = self
present(picker, animated: true)

// 2. 委托方法中識別
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
    guard let image = info[.originalImage] as? UIImage,
          let ciImage = CIImage(image: image) else { return }
    
    let request = VNDetectBarcodesRequest { request, error in
        guard let results = request.results as? [VNBarcodeObservation] else { return }
        for result in results {
            print("掃碼結果: \(result.payloadStringValue ?? "")")
        }
    }
    let handler = VNImageRequestHandler(ciImage: ciImage)
    try? handler.perform([request])
    picker.dismiss(animated: true)
}

4. 手電筒控制

guard let device = AVCaptureDevice.default(for: .video), device.hasTorch else { return }
try? device.lockForConfiguration()
device.torchMode = device.torchMode == .on ? .off : .on
device.unlockForConfiguration()

集成清單

  1. Info.plist 添加 NSCameraUsageDescription、NSPhotoLibraryUsageDescription。
  2. 引入庫(CocoaPods/SPM):pod 'QRCodeReader.swift'。
  3. 自定義掃描頁 UI(覆蓋層、提示框、燈光按鈕)。
  4. 測試:暗光、反光、異形碼、相冊圖片、長距離。

避坑指南

  • 模擬器**無相機**,必須真機調試。
  • iOS 10+ 必須聲明權限描述,否則 Crash。
  • 相冊選圖識別依賴 Vision 框架 (iOS 11+),舊版本需用 CIDetector (較慢、準確率低)。
  • 外部掃碼槍通常模擬鍵盤輸入(HID 模式),焦點在輸入框時自動填入,無需特殊代碼。

推薦直接集成 **QRCodeReader.swift** 或 **Vision 框架**,幾十行代碼覆蓋全部需求,維護成本極低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
庫特點GitHub Stars
EFQRCode生成/識別雙支持、Swift 純原生、支持圖片水印3.5k+
QRCodeReader.swift簡潔封裝、支持相冊選圖、燈光切換、代理回調2.8k+
MTBBarcodeScannerObjC 老牌、穩定、支持連續掃描、自定義覆蓋層1.2k+
Vision 框架 (iOS 11+)Apple 官方 ML 視覺框架、離線、高精度、支持文本/人臉/條碼統一 API內置