¿Cómo capturo los datos del código QR en el área específica de AVCaptureVideoPreviewLayer usando Swift?

Estoy creando una aplicación para iPad y una de sus funciones es escanear códigos QR. Tengo la parte de escaneo QR funcionando, pero el problema que tengo es que la pantalla del iPad es muy grande y voy a escanear pequeños códigos QR de una hoja de papel con muchos códigos QR visibles a la vez. Quiero designar un área más pequeña de la pantalla para ser la única área que realmente puede capturar un código QR, de modo que es más fácil para el usuario escanear el código QR específico que desean.

Actualmente, he realizado una UIView temporal con bordes rojos que se centra en la página como un ejemplo de dónde querré que el usuario escanee los códigos QR. Se parece a esto:

He buscado todo para encontrar una respuesta sobre cómo puedo orientar una región específica de AVCaptureVideoPreviewLayer para recostackr los datos del código QR, y lo que he encontrado son sugerencias para usar "rectOfInterest" con AVCaptureMetadataOutput. He intentado hacer eso, pero cuando pongo rectOfInterest en las mismas coorderadas y el mismo tamaño que utilizo para mi UIView que aparece correctamente, ya no puedo escanear / reconocer ningún código QR. ¿Puede alguien decirme por qué el área escaneable no coincide con la location de la UIView que se ve y cómo puedo get el rectOfInterest dentro de los bordes rojos que he agregado a la pantalla?

Aquí está el código de la function de escaneo que estoy usando actualmente:

func startScan() { // Get an instance of the AVCaptureDevice class to initialize a device object and provide the video // as the media type parameter. let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) // Get an instance of the AVCaptureDeviceInput class using the previous device object. var error:NSError? let input: AnyObject! = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: &error) if (error != nil) { // If any error occurs, simply log the description of it and don't continue any more. println("\(error?.localizedDescription)") return } // Initialize the captureSession object. captureSession = AVCaptureSession() // Set the input device on the capture session. captureSession?.addInput(input as! AVCaptureInput) // Initialize a AVCaptureMetadataOutput object and set it as the output device to the capture session. let captureMetadataOutput = AVCaptureMetadataOutput() captureSession?.addOutput(captureMetadataOutput) // calculate a centenetworking square rectangle with networking 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 that will server as a networking square to indicate where to place QRCode for scanning scanAreaView = UIView() scanAreaView?.layer.borderColor = UIColor.networkingColor().CGColor scanAreaView?.layer.borderWidth = 4 scanAreaView?.frame = scanRect // Set delegate and use the default dispatch queue to execute the call back captureMetadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue()) captureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode] captureMetadataOutput.rectOfInterest = scanRect // Initialize the video preview layer and add it as a sublayer to the 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 to highlight the QR code qrCodeFrameView = UIView() qrCodeFrameView?.layer.borderColor = UIColor.greenColor().CGColor qrCodeFrameView?.layer.borderWidth = 2 view.addSubview(qrCodeFrameView!) view.bringSubviewToFront(qrCodeFrameView!) // Add a button that will be used to close out of the 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!) } 

Actualización La razón por la que no creo que esto sea un duplicado es porque la otra publicación referenceda está en Objective-C y mi código está en Swift. Para aquellos de nosotros que son nuevos en iOS, no es tan fácil traducir los dos. Además, la respuesta de la publicación referenceda no muestra la actualización real realizada en el código que resolvió su problema. Dejó una buena explicación acerca de tener que usar el método metadataOutputRectOfInterestForRect para convertir las coorderadas del rectángulo, pero todavía no puedo lograr que este método funcione, ya que no está claro cómo debería funcionar esto sin un ejemplo.