看了别人的类容后很感谢分享,然后这里在记录一些自己的内容
首先导入几个框架
#import <AVFoundation/AVFoundation.h>
#import <QuartzCore/QuartzCore.h>
#import <CoreMedia/CoreMedia.h>
#import <CoreVideo/CoreVideo.h>之后实现代理
@interface AddSN ()<AVCaptureMetadataOutputObjectsDelegate>//用于处理采集信息的代理
{
AVCaptureSession *_session;//输入输出的中间桥梁
}中间实现部分
//添加扫描条形码
- (void)addTheScanning{
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置扫描范围
output.rectOfInterest=CGRectMake((self.view.bounds.size.height / 2.0 - 15) / self.view.bounds.size.height,
0,
30.0 / self.view.bounds.size.height,
1);
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//初始化链接对象
_session = [[AVCaptureSession alloc]init];
//高质量采集率
[_session setSessionPreset:AVCaptureSessionPresetHigh];
[_session addInput:input];
[_session addOutput:output];
//设置扫码支持的编码格式(这里设置就判断二维码)
output.metadataObjectTypes=@[AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
//开始捕获
[_session startRunning];
}当扫描后的回调
//扫描条形码回调
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if (metadataObjects.count>0) {
[_session stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//输出扫描字符串
// NSLog(@"%@",metadataObject.stringValue);
[self.selfSuper changeTheSnTextfile:metadataObject.stringValue];
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
}关于扫描范围的设置
output.rectOfInterest=CGRectMake((self.view.bounds.size.height / 2.0 - 15) / self.view.bounds.size.height,
0,
30.0 / self.view.bounds.size.height,
1);这里依次填入的X,Y和平常设置Bounds和Fram的顺序是相反的,而长度的选择和锚点的的使用方式类似,以比例的方式使用
3463

被折叠的 条评论
为什么被折叠?



