Code-barres sur swift 4

Je suis en train de mettre à niveau mi application de swift 4, mais le lecteur de code à barres n'est pas de travail.

J'ai isolé le lecteur de code à barres de code, et toujours pas de travail. La caméra fonctionne, mais il ne détecte pas le code à barres.

Le code a très bien fonctionné sur swift 3 iOS 10.

C'est le code complet

import AVFoundation
import UIKit
class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
var captureSession: AVCaptureSession!
var previewLayer: AVCaptureVideoPreviewLayer!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black
captureSession = AVCaptureSession()
let videoCaptureDevice = AVCaptureDevice.default(for: AVMediaType.video)
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice!)
} catch {
return
}
if (captureSession.canAddInput(videoInput)) {
captureSession.addInput(videoInput)
} else {
failed();
return;
}
let metadataOutput = AVCaptureMetadataOutput()
if (captureSession.canAddOutput(metadataOutput)) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [AVMetadataObject.ObjectType.ean8, AVMetadataObject.ObjectType.ean13, AVMetadataObject.ObjectType.pdf417]
} else {
failed()
return
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession);
previewLayer.frame = view.layer.bounds;
previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill;
view.layer.addSublayer(previewLayer);
captureSession.startRunning();
}
func failed() {
let ac = UIAlertController(title: "Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
captureSession = nil
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if (captureSession?.isRunning == false) {
captureSession.startRunning();
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if (captureSession?.isRunning == true) {
captureSession.stopRunning();
}
}
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
captureSession.stopRunning()
if let metadataObject = metadataObjects.first {
let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject;
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
found(code: readableObject.stringValue!);
}
dismiss(animated: true)
}
func found(code: String) {
print(code)
}
override var prefersStatusBarHidden: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
}

Je suis en utilisant iOS 11 sur mon iPhone, mis à jour à la bêta 9.

Une idée? Merci.

  • Il est donc bon de savoir que ce problème n'est pas seulement ce qui m'arrive après la mise à jour vers iOS 11 et Swift 4 pour mon projet. J'ai un très de base lecteur de QR code ainsi dans mon application en utilisant un AVCaptureMetadataOutput objet et le AVCaptureMetadataOutputObjectsDelegate délégué. J'ai vérifié que tout est en constante et constamment en cours d'exécution et n'est pas interrompu. Je pense qu'à ce point de son temps pour soumettre un bug à Apple (à la fois d'utilisation). Seule chose qui a changé les noms de propriétés/fonctions Swift 4, mais rien d'autre. Bizarre que nous n'obtenons pas tout délégué rappels.
  • Aussi, en regardant votre code, vous devez créer une Série de File d'attente pour votre AVCaptureMetadataOutputObjectsDelegate de rappel. metadataOutput.setMetadataObjectsDelegate(de soi, de la file d'attente: DispatchQueue.principal). Au lieu d'utiliser la file d'attente principale, créer une série de file d'attente en tant que propriété de votre vue-contrôleur et l'utiliser ici plutôt que de la file d'attente principale.
  • Juste pour la référence, peut être utilisé de tiers github.com/mahendragp/MGPBarcodeScanner
InformationsquelleAutor Dx_ | 2017-09-02