ios - How do I capture QR Code data in specific area of AVCaptureVideoPreviewLayer using Swift? -


i creating ipad app , 1 of it's features scanning qr codes. have qr scanning part working, issue have ipad screen large , scanning small qr codes of of sheet of paper many qr codes visible @ once. want designate smaller area of display area can capture qr code easier user scan specific qr code want.

i have made temporary uiview red borders centered on page example of want user scan qr codes. looks this:

i have looked on find answer how can target specific region of avcapturevideopreviewlayer collect qr code data, , have found suggestions use "rectofinterest" avcapturemetadataoutput. have attempted that, when set rectofinterest same coordinates , size use uiview shows correctly, can no longer scan/recognize qr codes. can please tell me why scannable area not match location of uiview seen , how can rectofinterest within red borders have added screen?

here code scan function using:

func startscan() {     // instance of avcapturedevice class initialize device object , provide video     // media type parameter.     let capturedevice = avcapturedevice.defaultdevicewithmediatype(avmediatypevideo)      // instance of avcapturedeviceinput class using previous device object.     var error:nserror?     let input: anyobject! = avcapturedeviceinput.deviceinputwithdevice(capturedevice, error: &error)      if (error != nil) {         // if error occurs, log description of , don't continue more.         println("\(error?.localizeddescription)")         return     }      // initialize capturesession object.     capturesession = avcapturesession()     // set input device on capture session.     capturesession?.addinput(input as! avcaptureinput)      // initialize avcapturemetadataoutput object , set output device capture session.     let capturemetadataoutput = avcapturemetadataoutput()     capturesession?.addoutput(capturemetadataoutput)      // calculate centered square rectangle red border     let size = 300     let screenwidth = self.view.frame.size.width     let xpos = (cgfloat(screenwidth) / cgfloat(2)) - (cgfloat(size) / cgfloat(2))     let scanrect = cgrect(x: int(xpos), y: 150, width: size, height: size)      // create uiview server red square indicate place qrcode scanning     scanareaview = uiview()     scanareaview?.layer.bordercolor = uicolor.redcolor().cgcolor     scanareaview?.layer.borderwidth = 4     scanareaview?.frame = scanrect      // set delegate , use default dispatch queue execute call     capturemetadataoutput.setmetadataobjectsdelegate(self, queue: dispatch_get_main_queue())     capturemetadataoutput.metadataobjecttypes = [avmetadataobjecttypeqrcode]     capturemetadataoutput.rectofinterest = scanrect       // initialize video preview layer , add sublayer viewpreview view's layer.     videopreviewlayer = avcapturevideopreviewlayer(session: capturesession)     videopreviewlayer?.videogravity = avlayervideogravityresizeaspectfill     videopreviewlayer?.frame = view.layer.bounds     view.layer.addsublayer(videopreviewlayer)      // start video capture.     capturesession?.startrunning()      // initialize qr code frame highlight qr code     qrcodeframeview = uiview()     qrcodeframeview?.layer.bordercolor = uicolor.greencolor().cgcolor     qrcodeframeview?.layer.borderwidth = 2     view.addsubview(qrcodeframeview!)     view.bringsubviewtofront(qrcodeframeview!)      // add button used close out of scan view     videobtn.settitle("close", forstate: .normal)     videobtn.settitlecolor(uicolor.blackcolor(), forstate: .normal)     videobtn.backgroundcolor = uicolor.graycolor()     videobtn.layer.cornerradius = 5.0;     videobtn.frame = cgrectmake(10, 30, 70, 45)     videobtn.addtarget(self, action: "pressclose:", forcontrolevents: .touchupinside)     view.addsubview(videobtn)      view.addsubview(scanareaview!)  } 

update reason not think duplicate because other post referenced in objective-c , code in swift. of new ios not easy translate two. also, referenced post's answer not show actual update made in code resolved issue. left explanation having use metadataoutputrectofinterestforrect method convert rectangle coordinates, still cannot seem method work, unclear me how should work without example.


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -