- (void)setupCamera
{
// Device
_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Input
_input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];
// Output
if (!_output) {
_output = [[AVCaptureMetadataOutput alloc] init];
}
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
// Session
if (!_session) {
_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];
}
// 条码类型 AVMetadataObjectTypeQRCode
_output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
// Preview
_preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session];
_preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
_preview.frame =CGRectMake(0,0,mScreenWidth,mScreenHeight);
[self.view.layer insertSublayer:self.preview atIndex:0];
// Start
[_session startRunning];
timer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(animation1) userInfo:nil repeats:YES];
}
修改之后
- (void)setupCamera
{
// Device
_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Input
_input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];
// Output
if (!_output) {
_output = [[AVCaptureMetadataOutput alloc] init];
}
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
// Session
if (!_session) {
_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];
}
// 条码类型 AVMetadataObjectTypeQRCode
_output.metadataObjectTypes = [NSArray arrayWithObject:AVMetadataObjectTypeQRCode];
// Preview
_preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session];
_preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
_preview.frame =CGRectMake(0,0,mScreenWidth,mScreenHeight);
[self.view.layer insertSublayer:self.preview atIndex:0];
// Start
[_session startRunning];
timer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(animation1) userInfo:nil repeats:YES];
}
AVCaptureMetadataOutput类的对象(在本例里是self.outPut),self.outPut的属性metadataObjectTypes要在AVCaptureSession类对象(本例为self.session)
[self.session addOutput:self.outPut]即添加了AVCaptureMetadataOutput的对象后,方可对其进行设置;