unsupported type found. Use -availableMetadataObjectTypes错误的解决
找了好多解决方法,说是没开权限或者是要进行判断权限是否打开都试了,依然是这个问题,其实是最开始看别人文章代码的问题
- (void)initAvfoundationScan{
_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
_input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];
_output = [[AVCaptureMetadataOutput alloc]init];
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
_session = [[AVCaptureSession alloc]init];
[_session setSessionPreset:AVCaptureSessionPresetHigh];
//设置条码类型
_output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
//连接输入和输出
if ([_session canAddInput:self.input])
{
[_session addInput:self.input];
}
if ([_session canAddOutput:self.output])
{
[_session addOutput:self.output];
}
//添加扫描画面
_preview =[AVCaptureVideoPreviewLayer layerWithSession:_session];
_preview.videoGravity =AVLayerVideoGravityResizeAspectFill;
_preview.frame =self.view.layer.bounds;
[self.view.layer insertSublayer:_preview atIndex:0];
//开始扫描
[_session startRunning];
}
红色部分是错误的顺序,看了https://stackoverflow.com/questions/18995236/ios-7-avcapturemetadataoutput-delegate-qrcode-scanner
正确的顺序应该是
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[session addOutput:output];
output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];