如何使用AVFoundation设置扫描绑定

时间:2014-04-25 05:24:23

标签: ios avfoundation barcode

我在我的一个iOS应用程序中尝试条形码扫描程序。我成功实施了条形码扫描仪。

但目前条形码扫描仅以全屏显示。但我想要的是,视频应全屏观看,条形码应仅在特定部分扫描。也就是说,如果条形码放置在该部分中,那么只应显示它。以下是我目前的代码:

session=[[AVCaptureSession alloc]init];
device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error=nil;

input=[AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (input) {
    [session addInput:input];
}
else{
    NSLog(@"Errod : %@",error);
}

output=[[AVCaptureMetadataOutput alloc]init];
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[session addOutput:output];

output.metadataObjectTypes=[output availableMetadataObjectTypes];

prevLayer=[AVCaptureVideoPreviewLayer layerWithSession:session];
[prevLayer setFrame:self.view.bounds];
[prevLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[self.view.layer addSublayer:prevLayer];

[session startRunning];

[self.view bringSubviewToFront:self.lblCode];
[self.view bringSubviewToFront:self.imgShade1];
[self.view bringSubviewToFront:self.imgShade2];

2 个答案:

答案 0 :(得分:0)

这就是你所追求的:

CGRect visibleMetadataOutputRect = [prevLayer metadataOutputRectOfInterestForRect:areaOfInterest];

output.rectOfInterest = visibleMetadataOutputRect;

其中areaOfInterest是CGRect。希望这能解决问题。

答案 1 :(得分:0)

也许现在回答这个问题已经很晚了,但我自己刚刚解决了这个问题。所以,希望以后能帮助别人。

关键字是AVCaptureMetadataOutput的rectOfInterest,这是我设置我的方法。

CGSize size = self.view.bounds.size;
_output.rectOfInterest = CGRectMake(cropRect.origin.y/size.height, cropRect.origin.x/size.width, cropRect.size.height/size.height, cropRect.size.width/size.width);

有关详细信息,请查看Apple Inc.的文档。

祝你好运。 :)