ich hatte QRCode und Barcodescanner ich werde das Snippet unten
import AVFoundation
add Delegat
class YOUR_VIEW_CONTROLLER: UIViewController,AVCaptureMetadataOutputObjectsDelegate
initialize erforderlichen Variablen
var captureSession:AVCaptureSession?
var videoPreviewLayer:AVCaptureVideoPreviewLayer?
var qrCodeFrameView:UIView?
var qrCodeDelegate:QRCodeScannerVCDelegate?
let supportedCodeTypes = [AVMetadataObjectTypeUPCECode,
AVMetadataObjectTypeCode39Code,
AVMetadataObjectTypeCode39Mod43Code,
AVMetadataObjectTypeCode93Code,
AVMetadataObjectTypeCode128Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeAztecCode,
AVMetadataObjectTypePDF417Code,
AVMetadataObjectTypeQRCode]
hinzufügen unten Funktion in Ihrem Viewcontroller teilen
func startVideoCapture(){
// Get an instance of the AVCaptureDevice class to initialize a device object and provide the video as the media type parameter.
let captureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
do {
// Get an instance of the AVCaptureDeviceInput class using the previous device object.
let input = try AVCaptureDeviceInput(device: captureDevice)
// Initialize the captureSession object.
captureSession = AVCaptureSession()
// Set the input device on the capture session.
captureSession?.addInput(input)
// Initialize a AVCaptureMetadataOutput object and set it as the output device to the capture session.
let captureMetadataOutput = AVCaptureMetadataOutput()
captureSession?.addOutput(captureMetadataOutput)
// Set delegate and use the default dispatch queue to execute the call back
captureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
captureMetadataOutput.metadataObjectTypes = supportedCodeTypes
// Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer.
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
videoPreviewLayer?.frame = self.qrCodeView.bounds
self.qrCodeView.layer.addSublayer(videoPreviewLayer!)
self.qrCodeView.clipsToBounds = true
// Start video capture.
captureSession?.startRunning()
qrCodeFrameView = UIView()
// if let qrCodeFrameView = qrCodeFrameView {
// qrCodeFrameView.layer.borderColor = UIColor.green.cgColor
// qrCodeFrameView.layer.borderWidth = 2
// self.qrCodeView.addSubview(qrCodeFrameView)
// self.qrCodeView.bringSubview(toFront: qrCodeFrameView)
// }
} catch {
// If any error occurs, simply print it out and don't continue any more.
print(error)
return
}
}
// MARK: - AVCaptureMetadataOutputObjectsDelegate Methods
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects == nil || metadataObjects.count == 0 {
qrCodeFrameView?.frame = CGRect.zero
print("No QR/barcode is detected")
return
}
// Get the metadata object.
let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
if supportedCodeTypes.contains(metadataObj.type) {
// If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds
let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metadataObj)
if barCodeObject != nil{
qrCodeFrameView?.frame = barCodeObject!.bounds
}
if metadataObj.stringValue != nil {
print("\(metadataObj.stringValue)")
}
}
}
und in Ihrem viewWillAppear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
self.startVideoCapture()
}
und vergessen Sie nicht, die Kamera um Erlaubnis, bevor Anruf startViewCapture
Hope this helfen Ihnen
Welche Arten von Barcodes Sie Scannen zu überprüfen? Ich habe den integrierten AVMetadataOutput für EAN-8 und EAN-13 verwendet und festgestellt, dass er extrem zuverlässig und schnell ist. – Gereon
Nicht sicher, ob einige von denen es bereits tun, aber das Erzwingen des Fokus kann viel helfen, da oft viel Zeit verloren geht, wenn versucht wird, Fokus statt der eigentlichen Barcode-Identifikation zu erhalten. Darüber hinaus müssen Sie viel mehr Details angeben, einschließlich der Art des Barcodes, seine Größe, Entfernung, die Art des Materials, ob Sie einen guten Kontrast haben, etc. Das tatsächliche Telefon kann auch helfen. Und natürlich nehmen wir an, Sie benutzen die Rückkamera. – jcaron
@jcaron: Barcode, den ich scannen möchte, ist Code 128 Typ. Größe ist ungefähr 1cm x 4cm. Ich habe versucht mit iPhone 6, 6s und 5. Ich glaube, ich habe versucht, Kamera-Kontrast anzupassen, aber Scanning-Geschwindigkeit ist nicht schneller. Können Sie mir zeigen, wie Sie den Fokus direkt auf den Barcode setzen können? – ThangBM