Kuidas luua QR-koodi skanneri rakendus Swiftis

Mis on QR-kood? Usun, et enamik teist teab, mis on QR-kood. Kui te pole sellest veel kuulnud, vaadake lihtsalt ülaltoodud pilti - see on QR-kood.

QR (Quick Response) on omamoodi kahemõõtmeline vöötkood, mille on välja töötanud Denso. Algselt tootmises osade jälgimiseks loodud QR-kood on viimastel aastatel tarbijate ruumis populaarsust kogunud, kuna selleks saab kodeerida sihtlehe URL-i või turundusteavet. Erinevalt tavalisest vöötkoodist sisaldab QR-kood teavet nii horisontaalses kui vertikaalses suunas. Seega aitab see kaasa selle võimele salvestada suuremat hulka andmeid nii numbriliselt kui ka tähe kujul. Ma ei taha siin uurida QR-koodi tehnilisi üksikasju. Kui soovite rohkem teada saada, saate vaadata QR-koodi ametlikku veebisaiti.

IPhone'i ja Androidi telefonide levimuse suurenemisega on järsult suurenenud QR-koodide kasutamine. Mõnes riigis võib QR-koode leida peaaegu kõikjalt. Need ilmuvad ajakirjades, ajalehtedes, kuulutustes, stendidel, nimekaartidel ja isegi toidumenüüs. IOS-i arendajana võite küsida, kuidas saate oma rakenduse lubada QR-koodi lugemiseks. Enne iOS 7 pidi skannimisfunktsiooni rakendamisel lootma kolmandate osapoolte teekidele. Nüüd saate kasutada sisseehitatud AVFoundationi raamistikku, et vöötkoode reaalajas avastada ja lugeda.

Rakenduse loomine QR-koodide skannimiseks ja tõlkimiseks pole kunagi varem olnud nii lihtne.

Kiirnipp: saate luua oma QR-koodi. Minge lihtsalt saidile http://www.qrcode-monkey.com

QR-koodilugeja rakenduse loomine

Demorakendus, mida me ehitama hakkame, on üsna lihtne ja arusaadav. Enne kui alustame demorakenduse loomist, on siiski oluline mõista, et iOS-is iga vöötkoodi skaneerimine, sealhulgas QR-koodi skaneerimine, põhineb täielikult video püüdmisel. Sellepärast lisatakse vöötkoodi skaneerimise funktsioon AVFoundationi raamistikku. Pidage seda meeles, sest see aitab kogu peatükist aru saada.

Niisiis, kuidas demorakendus töötab?

Vaadake allolevat ekraanipilti. Nii näeb rakenduse kasutajaliides välja. Rakendus töötab üsna sarnaselt video hõivamise rakendusega, kuid ilma salvestusfunktsioonita. Rakenduse käivitamisel kasutab see QR-koodi tuvastamiseks iPhone'i tagumist kaamerat ja tuvastab selle automaatselt. Dekodeeritud teave (nt URL) kuvatakse ekraani allosas.

QR-koodi lugeja demo

See on nii lihtne.

Rakenduse loomiseks võite alustada projekti malli allalaadimisega saidilt http://www.appcoda.com/resources/swift42/QRCodeReaderStarter.zip. Olen juba süžeeskeemi üles ehitanud ja teie jaoks sõnumimärgise sidunud. Põhiekraan on seotud QRCodeViewControlleri klassiga, skanneri ekraan aga QRScannerControlleri klassiga.

Stardiprojekt

Saate käivitada käivitusprojekti, et vaadata. Pärast rakenduse käivitamist võite skannimisvaate kuvamiseks puudutada skannimisnuppu. Hiljem rakendame selle vaatekontrolleri QR-koodi skannimiseks.

Nüüd, kui olete aru saanud, kuidas stardiprojekt töötab, alustame ja arendame rakenduses välja QR-skannimise funktsiooni.

AVFoundationi raamistiku importimine

Olen projekti malli loonud rakenduse kasutajaliidese. Kasutajaliideses olevat silti kasutatakse QR-koodi dekodeeritud teabe kuvamiseks ja see on seotud QRScannerControlleri klassi omadusega messageLabel.

Nagu ma juba varem mainisin, loodame QR-koodi skaneerimise funktsiooni rakendamisel AVFoundationi raamistikule. Esiteks avage fail QRScannerController.swift ja importige raamistik:

Hiljem peame rakendama protokolli AVCaptureMetadataOutputObjectsDelegate. Me räägime sellest mõne aja pärast. Praegu võta protokoll vastu pikendusega:

Enne jätkamist kuulutage QRScannerControlleri klassis järgmised muutujad. Räägime neist ükshaaval hiljem.

Videohõive rakendamine

Nagu eelmises osas mainitud, põhineb QR-koodi lugemine täielikult videolõikudel. Reaalajas pildistamiseks peame tegema ainult järgmist:

  1. Otsige tagakaamera seade üles.
  2. Seadke objekti AVCaptureSession sisend video hõivamiseks sobivasse AVCaptureDevice.

Sisestage QRScannerControlleri klassi viewDidLoad meetodisse järgmine kood:

Eeldusel, et olete eelmist peatükki lugenud, peaksite teadma, et klass AVCaptureDevice.DiscoverySession on loodud kõigi konkreetse seadmetüübi jaoks sobivate saadaolevate püüdmisseadmete leidmiseks. Ülaltoodud koodis täpsustame, et toome välja seadme, mis toetab meediumitüüpi AVMediaType.video.

Reaalajas pildistamiseks kasutame objekti AVCaptureSession ja lisame videohõive seadme sisendi. Objekti AVCaptureSession kasutatakse andmete voo koordineerimiseks videosisendiseadmest meie väljundini.

Sel juhul seatakse seansi väljund objektiks AVCaptureMetaDataOutput. Klass AVCaptureMetaDataOutput on QR-koodi lugemise põhiosa. Seda klassi koos protokolliga AVCaptureMetadataOutputObjectsDelegate kasutatakse sisendseadmest leitud metaandmete (seadme kaamera poolt hõivatud QR-koodi) pealtkuulamiseks ja inimloetavaks vorminguks tõlkimiseks.

Ärge muretsege, kui miski kõlab imelikult või kui te ei saa sellest kohe täielikult aru - kõik selgub mõne aja pärast. Jätkake nüüd järgmiste koodiridade lisamist viewDidLoad meetodi do-plokki:

Järgmisena jätkake allpool näidatud koodiridade lisamisega. Valisime objekti captureMetadataOutput delegaadiks ise. See on põhjus, miks QRReaderViewController klass võtab vastu protokolli AVCaptureMetadataOutputObjectsDelegate.

Uute metaandmeobjektide hõivamisel edastatakse need edasiseks töötlemiseks delegaadiobjektile. Ülaltoodud koodis täpsustame lähetusjärjekorra, mille peal delegaadi meetodeid täita. Saatejärjekord võib olla kas järjestikune või samaaegne. Apple'i dokumentide kohaselt peab järjekord olema jadajärjekord. Niisiis, vaikimisi jadajärjekorra saamiseks kasutame DispatchQueue.main.

Ka metadataObjectTypes atribuut on üsna oluline; kuna see on koht, kus me ütleme rakendusele, millised metaandmed meid huvitavad. AVMetadataObject.ObjectType.qr näitab selgelt meie eesmärki. Tahame teha QR-koodi skaneerimise.

Nüüd, kui oleme AVCaptureMetadataOutput objekti seadistanud ja konfigureerinud, peame kuvama ekraanil seadme kaameraga jäädvustatud video. Seda saab teha AVCaptureVideoPreviewLayeri abil, mis tegelikult on CALayer. Kasutate seda eelvaate kihti koos AV-hõivamise seansiga video kuvamiseks. Eelvaate kiht lisatakse praeguse vaate alamkihina. Sisestage allpool kood blokeerimise blokki:

Lõpuks alustame video hõivamist, kutsudes üles hõivamisseansi startRunning meetodi:

Kui kompileerite ja käivitate rakenduse päris iOS-seadmes, jookseb see skannimisnuppu koputades ootamatult järgmise tõrkega:

Sarnaselt sellega, mida oleme teinud helisalvestuse peatükis, nõuab iOS rakenduste arendajatelt enne kaamerale juurdepääsu lubamist kasutaja luba. Selleks peate faili Info.plist lisama võtme nimega NSCameraUsageDescription. Uue rea lisamiseks avage fail ja paremklõpsake tühjal alal. Seadke võtmeks Privaatsus - kaamera kasutusala kirjeldus ja väärtus väärtuseks Peame QR-koodi skannimiseks kasutama teie kaamerat.

Info.plisti redigeerimine uue võtme lisamiseks

Kui olete redigeerimise lõpetanud, juurutage rakendus ja käivitage see uuesti päris seadmes. Skaneerimisnuppu puudutades peaks sisseehitatud kaamera üles ilmuma ja videot jäädvustama. Kuid sel hetkel on sõnumi silt ja ülemine riba peidetud. Selle parandamiseks lisage järgmine koodirea. See teisaldab sõnumi sildi ja ülemise riba, et kuvada videokihi ülaosas.

Pärast muudatuste tegemist käivitage rakendus uuesti. Ekraanile peaks nüüd ilmuma teatesilt QR-koodi ei tuvastatud.

QR-koodi lugemise juurutamine

Praeguse seisuga näeb rakendus välja üsna sarnane videohõiverakendusega. Kuidas saab see QR-koode skannida ja tõlkida koodi millekski tähenduslikuks? Rakendus ise on juba võimeline QR-koode tuvastama. Me lihtsalt pole sellest teadlikud. Rakenduse näpunäited on järgmised:

  • QR-koodi tuvastamise korral tõstab rakendus rohelise kasti abil koodi esile
  • QR-kood dekodeeritakse ja dekodeeritud teave kuvatakse ekraani allosas

Rohelise kasti algatamine

QR-koodi esiletõstmiseks loome kõigepealt UIView-objekti ja seame selle piiri roheliseks. Lisage järgmine kood vaateDidLoad meetodi do-plokki:

Muutuja qrCodeFrameView on ekraanil nähtamatu, kuna UIView objekti suurus on vaikimisi seatud nulli. Hiljem, kui QR-kood tuvastatakse, muudame selle suurust ja muudame selle roheliseks kastiks.

QR-koodi dekodeerimine

Nagu varem mainitud, kui objekt AVCaptureMetadataOutput tuvastab QR-koodi, kutsutakse AVCaptureMetadataOutputObjectsDelegate järgmine delegeerimismeetod:

Siiani pole me meetodit rakendanud; seetõttu ei saa rakendus QR-koodi tõlkida. QR-koodi hõivamiseks ja teabe dekodeerimiseks peame rakendama meetodi metaandmeobjektide täiendava töötlemise teostamiseks. Siin on kood:

Meetodi teine ​​parameeter (st metadataObjects) on massiivi objekt, mis sisaldab kõiki loetud metaandmeobjekte. Esimene asi, mida peame tegema, on veenduda, et see massiiv pole null ja see sisaldab vähemalt ühte objekti. Muul juhul lähtestame qrCodeFrameView suuruse nulli ja seadsime messageLabel vaikesõnumi.

Kui metaandmeobjekt leitakse, kontrollime, kas see on QR-kood. Kui see on nii, jätkame QR-koodi piiride leidmist. Neid paari koodirida kasutatakse rohelise kasti seadistamiseks QR-koodi esiletõstmiseks. Kutsudes meetodi viewPreviewLayer meetodile transformedMetadataObject (jaoks :), teisendatakse metaandmeobjekti visuaalsed omadused kihtide koordinaatideks. Sellest leiame rohelise kasti ehitamiseks mõeldud QR-koodi piirid.

Lõpuks dekodeerime QR-koodi inimloetavaks teabeks. See samm peaks olema üsna lihtne. Dekodeeritud teabele pääsete juurde, kasutades objekti AVMetadataMachineReadableCode omadust stringValue.

Nüüd olete valmis minema! Rakenduse koostamiseks ja käitamiseks reaalses seadmes klõpsake nuppu Käivita.

Proovi QR-koodi

Kui see on käivitatud, koputage skannimisnuppu ja seejärel suunake seade QR-koodi juurde joonisel 11.4. Rakendus tuvastab kohe koodi ja dekodeerib teabe.

QR-koodide skannimine ja dekodeerimine

See artikkel avaldati esmakordselt veebisaidil AppCoda.com ja see on näidispeatükk raamatust Intermediate iOS 12 Programming with Swift.

Jälgige meid sotsiaalmeedia platvormidel:
Facebook: facebook.com/AppCodamobile/
Twitter: twitter.com/AppCodaMobile
Instagram: instagram.com/AppCodadotcom

Kui teile see artikkel meeldis, klõpsake nuppu ja jagage, et aidata seda teistel leida! Lisage kommentaar alla.