iOS 7 AVCaptureMetadataOutput委托(QRCode扫描器)

我试图用新的iOS 7function实现一个QRCode扫描器,但是我的代码没有调用主AVCaptureMetadataOutputObjectsDelegate方法。

我已经使用AVFoundation摄像头之前和我目前的实现我有预览层运行没有问题。 即使切换我的输出回到AVCaptureVideoDataOutputvalidation我的会话设置。

我使用这个NSHipster职位作为指导,这里是我的代码到目前为止:

接口:

 @import AVFoundation; @interface QRCodeViewController () <AVCaptureMetadataOutputObjectsDelegate> @property (strong, nonatomic) AVCaptureDevice* device; @property (strong, nonatomic) AVCaptureDeviceInput* input; @property (strong, nonatomic) AVCaptureMetadataOutput* output; @property (strong, nonatomic) AVCaptureSession* session; @property (strong, nonatomic) AVCaptureVideoPreviewLayer* preview; @end 

build立:

 - (void)setupCamera { // Device self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // Input self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; // Output self.output = [[AVCaptureMetadataOutput alloc] init]; [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; // Session self.session = [[AVCaptureSession alloc] init]; [self.session addInput:self.input]; [self.session addOutput:self.output]; // Preview self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session]; self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill; self.preview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); [self.view.layer insertSublayer:self.preview atIndex:0]; // Start [self.session startRunning]; } 

委托方法:

 // DELEGATE METHOD NOT CALLED - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { NSLog(@"Metadata"); } 

任何帮助是极大的赞赏!

我试图自己弄清楚这一点。 该文件似乎说,如果你不设置你想在metadataObjectTypes中的types,你将不会得到任何调用。 但是,我的iPad Mini的相机返回一个空数组availableMetadataObjectTypes。 让我们知道你的想法。

编辑:

我刚刚发现,如果将AVCaptureMetadataOutput对象添加到会话中,则可以填充availableMetadataObjectTypes,并且可以将条形码检测器添加到该对象中。 然后captureOutput委托会被调用,所以像这样:

 AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output]; output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode]; 

iOS 10对我造成同样的问题。 我目前有在WWDC 2016发布的开发者版本。当我用iOS 9在手机上运行应用程序时, captureOutput:didOutputMetadataObjects:方法再次被调用。