提问人:Rajendra 提问时间:10/10/2023 最后编辑:HangarRashRajendra 更新时间:10/10/2023 访问量:56
未调用 AVCaptureMetadataOutput 委托方法
AVCaptureMetadataOutput delegate method is not called
问:
我想使用类扫描二维码。我的代码如下,AVFoundation > AVCaptureMetadataOutput
@interface QRScannerViewController : UIViewController<AVCaptureMetadataOutputObjectsDelegate>{
- (void)startReading {
NSError *error;
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
if(!deviceInput) {
NSLog(@"deviceInput Error %@", error.localizedDescription);
}
_captureSession = [[AVCaptureSession alloc]init];
[_captureSession addInput:deviceInput];
capturedMetadataOutput = [[AVCaptureMetadataOutput alloc] init];
[_captureSession addOutput:capturedMetadataOutput];
capturedMetadataOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
dispatch_queue_t dispatchQueue = dispatch_queue_create("myQueue", NULL);
[capturedMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];
[capturedMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];
_videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[_viewPreview.layer addSublayer:_videoPreviewLayer];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self->_captureSession startRunning];
});
}
- (void)captureOutput:(AVCaptureOutput *)output didOutputMetadataObjects:(NSArray<__kindof AVMetadataObject *> *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
if (metadataObjects != nil && metadataObjects.count > 0) {
NSLog(@"%@", [metadataObjects objectAtIndex:0]);
}
}
}
我不明白为什么我没有接到电话。我将 AVMetadataObjectTypeQRCode 元数据值设置为 AVCaptureMetadataOutput。captureOutput:output didOutputMetadataObjects:metadataObjects fromConnectionconnection
答:
-1赞
user20325868
10/10/2023
#1
你记得认领 delagate 吗?self.delagate = QRScannerViewController
评论
0赞
Rajendra
10/10/2023
[capturedMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];此行符合协议。
0赞
user20325868
10/11/2023
是的,对不起,我习惯了在 swift 中工作。我的意思是在类声明中,但我看到你有它。我不再习惯在目标 c 中看到它了。
0赞
Rajendra
10/11/2023
它与相关的 swift 和 objective-C 类无关。是的,你的语法对正常的委托分配有效,但在 AVCaptureMetadataOutputObjectsDelegate 中,委托分配有不同的签名。
评论