mi uygulamasını 4 numaralı sürüme geçirmeye çalışıyorum ama barkod okuyucu çalışmıyor.Hızlı 4 Barkod Okunması
Barkod okuyucu kodunu izole ettim ve hala çalışmıyor. Kamera çalışıyor ancak barkodu algılamıyor.
kod 10.
Bu beta yükseltilmiş tam kod
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
}
}
benim iPhone'da iOS 11 kullanıyorum, bir hızlı 3 iOS'taki gayet güzel çalıştı 9.
Herhangi bir fikrin var mı? Teşekkür ederim.
Bu sorunun, projem için iOS 11 ve Swift 4 sürümüne güncellendikten sonra gerçekleşmediğini bilmek güzel. Benim app de bir AVCaptureMetadataOutput nesne ve AVCaptureMetadataOutputObjectsDelegate delege kullanarak çok basit bir QR kod okuyucu var. Her şeyin sürekli ve sürekli olarak çalıştığını ve kesintiye uğramadığını doğruladım. Ben bu noktada, Apple'a bir hata gönderme zamanı geldiğini düşünüyorum (her ikisi de kullanımda olmalıdır). Değiştirilen tek şey, Swift 4'teki özelliklerin/fonksiyonların isimleriydi ama başka hiçbir şey yoktu. Herhangi bir delege geri bildirimi alamıyoruz. –
Ayrıca, kodunuza bakarak, AVCaptureMetadataOutputObjectsDelegate geri aramanız için bir Seri Kuyruk oluşturmanız gerekir. metadataOutput.setMetadataObjectsDelegate (self, queue: DispatchQueue.main). Ana sırayı kullanmak yerine, görünüm denetleyicinizde bir özellik olarak bir sıra kuyruğu oluşturun ve ana sıradan ziyade burada kullanın. –