Lamentablemente, la cámara del iPhone es actualmente terrible para leer códigos de barras, ya que su lente tiene un enfoque fijo en ∞. Sin embargo, la mejor de las suertes!
Alastair Stuart
1
Solo he estado resolviendo este problema, así que escribiré mis observaciones. Probé pocas opciones. RSBarcodes_Swift - fue fácil de integrar, pero tuvo un rendimiento muy pobre. ZBarSDK: también fue fácil de implementar, aunque busqué en Google para encontrar cómo. Pero tuvo un rendimiento realmente bueno (no escaneó datamatrix y otros códigos raros) funciona muy bien para códigos de barras / QRCode. Pero Scandit fue el mejor de todos. Súper rápido, escanea todo. Lamentablemente cuesta bastante.
Katafalkas
Respuestas:
82
Producimos la aplicación 'Códigos de barras' para iPhone. Puede decodificar códigos QR. El código fuente está disponible desde el proyecto zxing ; específicamente, desea echar un vistazo al cliente de iPhone y al puerto parcial C ++ de la biblioteca principal . El puerto es un poco viejo, de alrededor de la versión 0.9 del código Java, pero aún debería funcionar razonablemente bien.
Si necesita escanear otros formatos, como los formatos 1D, puede continuar el puerto del código Java dentro de este proyecto a C ++.
EDITAR: los códigos de barras y el iphonecódigo en el proyecto se retiraron a principios de 2014.
Sean, ¿qué tipo de licencia utiliza? Quiero crear una aplicación paga que use Zbar. ¿Es eso posible bajo el acuerdo de licencia?
Radu
1
Para ser claros, en este momento, ¿ZXing en el iPhone solo admite códigos QR?
RefuX
Creo que se ha portado más a C ++, pero desafortunadamente el puerto sigue siendo un eco aproximado y desactualizado del código Java. Entonces, sí más es compatible, aunque tal vez no sea así.
Sean Owen
ZXing para iPhone todavía tiene pérdidas de memoria en 1.7 ver.
Yoon Lee
Por la lista de problemas en git of zXing, entiendo que solo podemos escanear el código de barras en modo horizontal.
Sagrian
81
Echa un vistazo a ZBar lee el código QR y los códigos ECN / ISBN y está disponible bajo la licencia LGPL v2.
@BenClayton, ¿qué significa compartir los archivos de objetos de la aplicación?
Dejell
@Odelya Enviando los archivos .o generados por Xcode a cualquier persona, teóricamente permitiéndoles construir su aplicación. Definitivamente no estoy contento de hacer esto (especialmente para mis clientes), así que ZBar está fuera de discusión para nosotros. La página de licencias de ZBar sugiere que 'esperemos que nadie las solicite'.
Ben Clayton
@BenClayton A. Gracias B. Podría cambiar el componente si alguien pregunta y requiere que los usuarios de la aplicación ya descargados descarguen una versión más nueva. ¿Es suficiente? C. Entonces, ¿qué biblioteca estás usando?
Dejell
56
Al igual que con el lanzamiento de iOS7usted, ya no necesita usar un marco externo o biblioteca. El ecosistema iOS con AVFoundation ahora es totalmente compatible con el escaneo de casi todos los códigos desde QR a través de EAN a UPC.
Solo eche un vistazo a la Nota técnica y la guía de programación AVFoundation. AVMetadataObjectTypeQRCodees tu amigo.
Si desea detectar el código de barras de la imagen en iOS8, este tutorial puede ser útil.
NSDeveloper
Descubrí que tenía que llamar startRunninga la sesión para que el código anterior funcionara en caso de que ayude a alguien :)
Chris
13
La cámara del iPhone 4 es más que capaz de hacer códigos de barras. La biblioteca de códigos de barras del paso de cebra tiene una bifurcación en github zxing-iphone . Es de código abierto.
Me parece que ZXingObjC es el que debería ser llevado a la cima con más votos por ahora. Yo no lo he utilizado todavía , pero la descripción dice que está en paridad con ZXing 2.0.
Shaolo
La licencia de ZBar requiere que ofrezca los archivos de objetos a los usuarios, para que puedan ejecutarlos y modificar su biblioteca también.
Puede encontrar otra solución iOS nativa usando Swift 4 y Xcode 9 a continuación. AVFoundationMarco nativo utilizado con en esta solución.
La primera parte es una subclase para la UIViewControllerque se han relacionado funciones de configuración y manejo AVCaptureSession.
importUIKitimportAVFoundationclassBarCodeScannerViewController:UIViewController{let captureSession =AVCaptureSession()var videoPreviewLayer:AVCaptureVideoPreviewLayer!var initialized =falselet barCodeTypes =[AVMetadataObject.ObjectType.upce,AVMetadataObject.ObjectType.code39,AVMetadataObject.ObjectType.code39Mod43,AVMetadataObject.ObjectType.code93,AVMetadataObject.ObjectType.code128,AVMetadataObject.ObjectType.ean8,AVMetadataObject.ObjectType.ean13,AVMetadataObject.ObjectType.aztec,AVMetadataObject.ObjectType.pdf417,AVMetadataObject.ObjectType.itf14,AVMetadataObject.ObjectType.dataMatrix,AVMetadataObject.ObjectType.interleaved2of5,AVMetadataObject.ObjectType.qr]overridefunc viewDidAppear(_ animated:Bool){super.viewDidAppear(animated)
setupCapture()// set observer for UIApplicationWillEnterForeground, so we know when to start the capture session again
NotificationCenter.default.addObserver(self,
selector:#selector(willEnterForeground),
name:.UIApplicationWillEnterForeground,
object:nil)}overridefunc viewWillDisappear(_ animated:Bool){super.viewWillDisappear(animated)// this view is no longer topmost in the app, so we don't need a callback if we return to the app.
NotificationCenter.default.removeObserver(self,
name:.UIApplicationWillEnterForeground,
object:nil)}// This is called when we return from another app to the scanner view
@objc func willEnterForeground(){
setupCapture()}func setupCapture(){var success =falsevar accessDenied =falsevar accessRequested =falselet authorizationStatus =AVCaptureDevice.authorizationStatus(for:.video)if authorizationStatus ==.notDetermined {// permission dialog not yet presented, request authorization
accessRequested =trueAVCaptureDevice.requestAccess(for:.video,
completionHandler:{(granted:Bool)->Voidinself.setupCapture();})return}if authorizationStatus ==.restricted || authorizationStatus ==.denied {
accessDenied =true}if initialized {
success =true}else{let deviceDiscoverySession =AVCaptureDevice.DiscoverySession(deviceTypes:[.builtInWideAngleCamera,.builtInTelephotoCamera,.builtInDualCamera],
mediaType:.video,
position:.unspecified)iflet captureDevice = deviceDiscoverySession.devices.first {do{let videoInput =tryAVCaptureDeviceInput(device: captureDevice)
captureSession.addInput(videoInput)
success =true}catch{NSLog("Cannot construct capture device input")}}else{NSLog("Cannot get capture device")}}if success {DispatchQueue.global().async {self.captureSession.startRunning()DispatchQueue.main.async {let captureMetadataOutput =AVCaptureMetadataOutput()self.captureSession.addOutput(captureMetadataOutput)let newSerialQueue =DispatchQueue(label:"barCodeScannerQueue")// in iOS 11 you can use main queue
captureMetadataOutput.setMetadataObjectsDelegate(self, queue: newSerialQueue)
captureMetadataOutput.metadataObjectTypes =self.barCodeTypes
self.videoPreviewLayer =AVCaptureVideoPreviewLayer(session:self.captureSession)self.videoPreviewLayer.videoGravity =.resizeAspectFill
self.videoPreviewLayer.frame =self.view.layer.bounds
self.view.layer.addSublayer(self.videoPreviewLayer)}}
initialized =true}else{// Only show a dialog if we have not just asked the user for permission to use the camera. Asking permission
// sends its own dialog to th user
if!accessRequested {// Generic message if we cannot figure out why we cannot establish a camera session
var message ="Cannot access camera to scan bar codes"#if(arch(i386)||arch(x86_64))&&(!os(macOS))
message ="You are running on the simulator, which does not hae a camera device. Try this on a real iOS device."#endif
if accessDenied {
message ="You have denied this app permission to access to the camera. Please go to settings and enable camera access permission to be able to scan bar codes"}let alertPrompt =UIAlertController(title:"Cannot access camera", message: message, preferredStyle:.alert)let confirmAction =UIAlertAction(title:"OK", style:.default, handler:{(action)->Voidinself.navigationController?.popViewController(animated:true)})
alertPrompt.addAction(confirmAction)self.present(alertPrompt, animated:true, completion:nil)}}}func handleCapturedOutput(metadataObjects:[AVMetadataObject]){if metadataObjects.count ==0{return}guardlet metadataObject = metadataObjects.first as?AVMetadataMachineReadableCodeObjectelse{return}if barCodeTypes.contains(metadataObject.type){iflet metaDataString = metadataObject.stringValue {
captureSession.stopRunning()
displayResult(code: metaDataString)return}}}func displayResult(code:String){let alertPrompt =UIAlertController(title:"Bar code detected", message: code, preferredStyle:.alert)iflet url = URL(string: code){let confirmAction =UIAlertAction(title:"Launch URL", style:.default, handler:{(action)->VoidinUIApplication.shared.open(url, options:[:], completionHandler:{(result)inif result {NSLog("opened url")}else{let alertPrompt =UIAlertController(title:"Cannot open url", message:nil, preferredStyle:.alert)let confirmAction =UIAlertAction(title:"OK", style:.default, handler:{(action)->Voidin})
alertPrompt.addAction(confirmAction)self.present(alertPrompt, animated:true, completion:{self.setupCapture()})}})})
alertPrompt.addAction(confirmAction)}let cancelAction =UIAlertAction(title:"Cancel", style:.cancel, handler:{(action)->Voidinself.setupCapture()})
alertPrompt.addAction(cancelAction)
present(alertPrompt, animated:true, completion:nil)}}
La segunda parte es la extensión de nuestra UIViewControllersubclase para AVCaptureMetadataOutputObjectsDelegatecapturar los resultados capturados.
extensionBarCodeScannerViewController:AVCaptureMetadataOutputObjectsDelegate{func metadataOutput(_ output:AVCaptureMetadataOutput, didOutput metadataObjects:[AVMetadataObject], from connection:AVCaptureConnection){
handleCapturedOutput(metadataObjects: metadataObjects)}}
Actualización para Swift 4.2
.UIApplicationWillEnterForegroundcambia como UIApplication.willEnterForegroundNotification.
¿esto dará el nombre del producto, tamaño, precio, url del producto, moneda, nombre de la tienda? o solo dará el número del código de barras @abdullahselek
Ok, lo intentaré. Gracias por la respuesta @abdullahselek
R. Mohan
5
No estoy seguro de si esto ayudará, pero aquí hay un enlace a una biblioteca de código QR de código abierto . Como puede ver, un par de personas ya lo han usado para crear aplicaciones para el iPhone.
Wikipedia tiene un artículo que explica qué son los códigos QR . En mi opinión, los códigos QR son mucho más adecuados para el propósito que el código de barras estándar en lo que respecta al iPhone, ya que fue diseñado para este tipo de implementación.
Si el soporte para iPad 2 o iPod Touch es importante para su aplicación, elegiría un SDK de escáner de código de barras que pueda decodificar códigos de barras en imágenes borrosas, como nuestro SDK de escáner de código de barras Scandit para iOS y Android. Decodificar imágenes borrosas de códigos de barras también es útil en teléfonos con cámaras de enfoque automático porque el usuario no tiene que esperar a que se active el enfoque automático.
Scandit viene con un plan de precio comunitario gratuito y también tiene una API de producto que facilita la conversión de números de códigos de barras en nombres de productos.
(Descargo de responsabilidad: soy cofundador de Scandit)
¿Alguien sabe cuál es el nombre oficial de la aplicación de Stefan en la tienda de aplicaciones? Me gustaría descargarlo antes de sumergirme en el código real.
macutan
3
El problema con la cámara del iPhone es que los primeros modelos (de los cuales hay toneladas en uso) tienen una cámara de enfoque fijo que no puede tomar fotos enfocadas para distancias de menos de 2 pies. Las imágenes son borrosas y distorsionadas y si se toman desde una distancia mayor no hay suficiente detalle / información del código de barras.
Algunas compañías han desarrollado aplicaciones para iPhone que pueden adaptarse a eso mediante el uso de tecnologías avanzadas de desenfoque. Esas aplicaciones que puedes encontrar en la tienda de aplicaciones de Apple: pic2shop, RedLaser y ShopSavvy. Todas las compañías han anunciado que también tienen SDK disponibles, algunos de forma gratuita o con condiciones muy preferenciales, échale un vistazo.
Intenté usar ShopSavvy con un iPhone 3G. Es divertido, pero se bloquea con mucha frecuencia y le cuesta mucho leer códigos de barras planos y muy claros.
James Moore el
1
Y acabo de probar pic2shop. Cita de mi prometida: "se supone que esto facilitará nuestras vidas ¿CÓMO?" Es una aplicación linda, pero no puedo leer un código de barras por lo que puedo decir.
James Moore
¿Qué formato intentaste leer? Intenté usar pic2shop para escanear EAN y funciona muy bien. Sin embargo, la tarifa de la licencia es costosa, incluso más que RedLaser.
iamj4de
2
¡Con Swift 5 es simple y súper rápido!
Solo necesita agregar vainas de cacao "BarcodeScanner" aquí está el código completo
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '12.0'
target 'SimpleBarcodeScanner'
do
pod 'BarcodeScanner'
end
Asegúrese de agregar permiso de cámara en su archivo .plist
Si está desarrollando para iOS> 10.2 con Swift 4, puede probar mi solución. Mezclé esto y este tutorial y se me ocurrió un ViewController que escanea un código QR y print()lo elimina. También tengo un interruptor en mi interfaz de usuario para alternar la luz de la cámara, también podría ser útil. Por ahora solo lo probé en un iPhone SE, avíseme si no funciona en iPhones más nuevos.
Aqui tienes:
importUIKitimportAVFoundationclassQRCodeScanner:UIViewController,AVCaptureMetadataOutputObjectsDelegate{let captureSession:AVCaptureSession=AVCaptureSession()var videoPreviewLayer:AVCaptureVideoPreviewLayer?let qrCodeFrameView:UIView=UIView()var captureDevice:AVCaptureDevice?overridefunc viewDidLoad(){// Get the back-facing camera for capturing videos
let deviceDiscoverySession =AVCaptureDevice.DiscoverySession(deviceTypes:[.builtInWideAngleCamera,.builtInDualCamera], mediaType:AVMediaType.video, position:.back)
captureDevice = deviceDiscoverySession.devices.first
if captureDevice ==nil{
print("Failed to get the camera device")return}do{// Get an instance of the AVCaptureDeviceInput class using the previous device object.
let input =tryAVCaptureDeviceInput(device: captureDevice!)// 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 =[AVMetadataObject.ObjectType.qr]// Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer.
videoPreviewLayer =AVCaptureVideoPreviewLayer(session: captureSession)iflet videoPreviewLayer = videoPreviewLayer {
videoPreviewLayer.videoGravity =AVLayerVideoGravity.resizeAspectFill
videoPreviewLayer.frame = view.layer.bounds
view.layer.addSublayer(videoPreviewLayer)// Start video capture.
captureSession.startRunning()iflet hasFlash = captureDevice?.hasFlash,let hasTorch = captureDevice?.hasTorch {if hasFlash && hasTorch {
view.bringSubview(toFront: bottomBar)try captureDevice?.lockForConfiguration()}}}// QR Code Overlay
qrCodeFrameView.layer.borderColor =UIColor.green.cgColor
qrCodeFrameView.layer.borderWidth =2
view.addSubview(qrCodeFrameView)
view.bringSubview(toFront: qrCodeFrameView)}catch{// If any error occurs, simply print it out and don't continue any more.
print("Error: \(error)")return}}// MARK: Buttons and Switch
@IBActionfunc switchFlashChanged(_ sender:UISwitch){do{if sender.isOn {
captureDevice?.torchMode =.on
}else{
captureDevice?.torchMode =.off
}}}// MARK: AVCaptureMetadataOutputObjectsDelegate
func metadataOutput(_ output:AVCaptureMetadataOutput, didOutput metadataObjects:[AVMetadataObject], from connection:AVCaptureConnection){// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects.count ==0{
qrCodeFrameView.frame =CGRect.zero
return}// Get the metadata object.
let metadataObj = metadataObjects[0]as!AVMetadataMachineReadableCodeObjectif metadataObj.type ==AVMetadataObject.ObjectType.qr {// 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)
qrCodeFrameView.frame = barCodeObject!.bounds
print("QR Code: \(metadataObj.stringValue)")}}}
A veces puede ser útil también para generar códigos QR . Hay una excelente biblioteca de C para esto que funciona a las mil maravillas. Se llama libqrencode . Escribir una vista personalizada para mostrar el código QR no es tan difícil y se puede hacer con una comprensión básica de QuartzCore.
¿Conoces algún tutorial sobre cómo incluir esto en un proyecto xCode de iOS?
james
¿Le importaría compartir cómo generó la vista utilizando Quartcore? sería un gran ahorro de tiempo: P
ThomasRS
Eso es correcto. Sin embargo, asegúrese de cumplir con la licencia de software, la biblioteca se publica con.
GorillaPatch
Esta pregunta es sobre el reconocimiento, no sobre la generación.
MonsieurDart
0
puede verificar ZBarSDK para leer el código QR y los códigos ECN / ISBN, es fácil de integrar, pruebe el siguiente código.
-(void)scanBarcodeWithZBarScanner
{// ADD: present a barcode reader that scans from the camera feed
ZBarReaderViewController*reader =[ZBarReaderViewController new];
reader.readerDelegate =self;
reader.supportedOrientationsMask =ZBarOrientationMaskAll;ZBarImageScanner*scanner = reader.scanner;// TODO: (optional) additional reader configuration here
// EXAMPLE: disable rarely used I2/5 to improve performance
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to:0];//Get the return value from controller
[reader setReturnBlock:^(BOOL value){}
y en didFinishPickingMediaWithInfo obtenemos el valor del código de barras.
-(void) imagePickerController:(UIImagePickerController*) reader
didFinishPickingMediaWithInfo:(NSDictionary*) info
{// ADD: get the decode results
id<NSFastEnumeration> results =[info objectForKey:ZBarReaderControllerResults];ZBarSymbol*symbol =nil;for(symbol in results)// EXAMPLE: just grab the first barcode
break;// EXAMPLE: do something useful with the barcode data
barcodeValue = symbol.data;// EXAMPLE: do something useful with the barcode image
barcodeImage =[info objectForKey:UIImagePickerControllerOriginalImage];[_barcodeIV setImage:barcodeImage];//set the values for to TextFields
[self setBarcodeValue:YES];// ADD: dismiss the controller (NB dismiss from the *reader*!)
[reader dismissViewControllerAnimated:YES completion:nil];}
Respuestas:
Producimos la aplicación 'Códigos de barras' para iPhone. Puede decodificar códigos QR. El código fuente está disponible desde el proyecto zxing ; específicamente, desea echar un vistazo al cliente de iPhone y al puerto parcial C ++ de la biblioteca principal . El puerto es un poco viejo, de alrededor de la versión 0.9 del código Java, pero aún debería funcionar razonablemente bien.
Si necesita escanear otros formatos, como los formatos 1D, puede continuar el puerto del código Java dentro de este proyecto a C ++.
EDITAR: los códigos de barras y el
iphone
código en el proyecto se retiraron a principios de 2014.fuente
Echa un vistazo a ZBar lee el código QR y los códigos ECN / ISBN y está disponible bajo la licencia LGPL v2.
fuente
Al igual que con el lanzamiento de
iOS7
usted, ya no necesita usar un marco externo o biblioteca. El ecosistema iOS con AVFoundation ahora es totalmente compatible con el escaneo de casi todos los códigos desde QR a través de EAN a UPC.Solo eche un vistazo a la Nota técnica y la guía de programación AVFoundation.
AVMetadataObjectTypeQRCode
es tu amigo.Aquí hay un buen tutorial que lo muestra paso a paso: biblioteca de escaneo de códigos QR de iPhone iOS7
Solo un pequeño ejemplo sobre cómo configurarlo:
fuente
startRunning
a la sesión para que el código anterior funcionara en caso de que ayude a alguien :)La cámara del iPhone 4 es más que capaz de hacer códigos de barras. La biblioteca de códigos de barras del paso de cebra tiene una bifurcación en github zxing-iphone . Es de código abierto.
fuente
liteqr es un "Lector QR QR Lite en Objective C portado desde zxing" en github y tiene soporte para Xcode 4.
fuente
Hay dos bibliotecas principales:
ZXing una biblioteca escrita en Java y luego portada a Objective C / C ++ (solo código QR). Y TheLevelUp ha hecho otro puerto a ObjC: ZXingObjC
ZBar, un software de código abierto para leer códigos de barras, basado en C.
Según mis experimentos, ZBar es mucho más preciso y rápido que ZXing, al menos en iPhone.
fuente
CÓMO: Agregar un lector de código de barras a una aplicación de iPhone , que apunta a ZBar iPhone SDK , parece útil ( de otro hilo ).
fuente
Puede encontrar otra solución iOS nativa usando Swift 4 y Xcode 9 a continuación.
AVFoundation
Marco nativo utilizado con en esta solución.La primera parte es una subclase para la
UIViewController
que se han relacionado funciones de configuración y manejoAVCaptureSession
.La segunda parte es la extensión de nuestra
UIViewController
subclase paraAVCaptureMetadataOutputObjectsDelegate
capturar los resultados capturados.Actualización para Swift 4.2
.UIApplicationWillEnterForeground
cambia comoUIApplication.willEnterForegroundNotification
.fuente
metadataObjects
dentro de la función handleCapturedOutput .No estoy seguro de si esto ayudará, pero aquí hay un enlace a una biblioteca de código QR de código abierto . Como puede ver, un par de personas ya lo han usado para crear aplicaciones para el iPhone.
Wikipedia tiene un artículo que explica qué son los códigos QR . En mi opinión, los códigos QR son mucho más adecuados para el propósito que el código de barras estándar en lo que respecta al iPhone, ya que fue diseñado para este tipo de implementación.
fuente
Si el soporte para iPad 2 o iPod Touch es importante para su aplicación, elegiría un SDK de escáner de código de barras que pueda decodificar códigos de barras en imágenes borrosas, como nuestro SDK de escáner de código de barras Scandit para iOS y Android. Decodificar imágenes borrosas de códigos de barras también es útil en teléfonos con cámaras de enfoque automático porque el usuario no tiene que esperar a que se active el enfoque automático.
Scandit viene con un plan de precio comunitario gratuito y también tiene una API de producto que facilita la conversión de números de códigos de barras en nombres de productos.
(Descargo de responsabilidad: soy cofundador de Scandit)
fuente
Si todavía está disponible, puede echar un vistazo al código fuente del lector de datos DataMatrix de Stefan Hafeneger ( proyecto de código de Google ; publicación archivada del blog ).
fuente
El problema con la cámara del iPhone es que los primeros modelos (de los cuales hay toneladas en uso) tienen una cámara de enfoque fijo que no puede tomar fotos enfocadas para distancias de menos de 2 pies. Las imágenes son borrosas y distorsionadas y si se toman desde una distancia mayor no hay suficiente detalle / información del código de barras.
Algunas compañías han desarrollado aplicaciones para iPhone que pueden adaptarse a eso mediante el uso de tecnologías avanzadas de desenfoque. Esas aplicaciones que puedes encontrar en la tienda de aplicaciones de Apple: pic2shop, RedLaser y ShopSavvy. Todas las compañías han anunciado que también tienen SDK disponibles, algunos de forma gratuita o con condiciones muy preferenciales, échale un vistazo.
fuente
¡Con Swift 5 es simple y súper rápido!
Solo necesita agregar vainas de cacao "BarcodeScanner" aquí está el código completo
Asegúrese de agregar permiso de cámara en su archivo .plist
Y agregue Scanner y maneje el resultado en su ViewController de esta manera
Aún así, y cualquier pregunta o desafío, consulte la aplicación de muestra aquí con el código fuente completo
fuente
Para un escáner de código de barras iOS 7 nativo, eche un vistazo a mi proyecto en GitHub:
fuente
Creo que esto se puede hacer usando AVFramework, aquí está el código de muestra para hacer esto
fuente
Aquí hay un código simple:
fuente
Si está desarrollando para iOS> 10.2 con Swift 4, puede probar mi solución. Mezclé esto y este tutorial y se me ocurrió un ViewController que escanea un código QR y
print()
lo elimina. También tengo un interruptor en mi interfaz de usuario para alternar la luz de la cámara, también podría ser útil. Por ahora solo lo probé en un iPhone SE, avíseme si no funciona en iPhones más nuevos.Aqui tienes:
fuente
A veces puede ser útil también para generar códigos QR . Hay una excelente biblioteca de C para esto que funciona a las mil maravillas. Se llama libqrencode . Escribir una vista personalizada para mostrar el código QR no es tan difícil y se puede hacer con una comprensión básica de QuartzCore.
fuente
puede verificar ZBarSDK para leer el código QR y los códigos ECN / ISBN, es fácil de integrar, pruebe el siguiente código.
y en didFinishPickingMediaWithInfo obtenemos el valor del código de barras.
fuente