iOS开发 - 二维码的扫描

)setupScanQRCode { // 1、创建设备会话对象,用来设置设备数据输入 _session = [[AVCaptureSession alloc] init]; [_session setSessionPreset: AVCaptureSessionPresetHigh]; //高质量采集 if ([_session canAddInput:self.input]) { [_session addInput:self.input]; } if ([_session canAddOutput:self.output]) { [_session addOutput:self.output]; } // 2.设置条码类型为二维码 [self.output setMetadataObjectTypes:self.output.availableMetadataObjectTypes]; // 3.设置扫描范围 [self setOutputInterest]; // 4、实时获取摄像头原始数据显示在屏幕上 _preview = [AVCaptureVideoPreviewLayer layerWithSession:_session]; _preview.videoGravity = AVLayerVideoGravityResizeAspectFill; _preview.frame = self.view.layer.bounds; self.view.layer.backgroundColor = [[UIColor blackColor] CGColor]; [self.view.layer insertSublayer:_preview atIndex:0]; // 5.设置非扫描区域的黑色蒙版图层 self.maskLayer = [[CALayer alloc]init]; self.maskLayer.frame = self.view.layer.bounds; self.maskLayer.delegate = self; [self.view.layer insertSublayer:self.maskLayer above:_preview]; [self.maskLayer setNeedsDisplay];}
  • 设置扫描范围
    关于扫描范围,这是一个坑,稍稍不注意,就会踩进去了。扫描的范围是通过这个参数rectOfInterest来设置的,但这个参数不是普通的CGRect,而是0~1的一个范围比例。正确的创建为CGRectMake(y/Height,x/Width,height/Height,width/Width),这里左边是扫描区域的x,y,width,height,右边的是当前控制器view的Width和Height。具体的代码实现如下: