自iOS7.0以后,苹果推出了原生的扫描二维码,所以,以前用的都是第三方的,最近做一个项目,就参考了一下官方文档和一些大神的博客,自己也写了一下原生的二维码扫描,废话不多说,下面上代码。
首先需要导入的是 #import<AVFoundation/AVFoundation.h>这个不用多说了吧。
然后开始代码部分:
@interface SCodeController ()<AVCaptureMetadataOutputObjectsDelegate,MBProgressHUDDelegate>
{
AVCaptureDevice * device;
AVCaptureDeviceInput * input;
AVCaptureMetadataOutput * output;
AVCaptureSession * session;
AVCaptureVideoPreviewLayer * preview;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setupCamera];
}
(void)setupCamera
{
// Device
if (!device) {
device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
}// Input
if (!input) {
input = [AVCaptureDeviceInput deviceInputWithDevice: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:input])
{
[session addInput:input];
}if ([session canAddOutput:output])
{
[session addOutput:output];
}// 条码类型 AVMetadataObjectTypeQRCode
output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
// Preview
if(!preview)
{
preview = [AVCaptureVideoPreviewLayer layerWithSession:session];
preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
preview.frame = CGRectMake((self.view.bounds.size.width-ScannerSize)*0.5,
ScannerTop,
ScannerSize,
ScannerSize);
[self.view.layer insertSublayer:preview atIndex:0];
}
[session startRunning];
}
//实现代理方法
- (void)captureOutput:(AVCaptureOutput )captureOutput didOutputMetadataObjects:(NSArray )metadataObjects fromConnection:(AVCaptureConnection *)connection
{
NSString *stringValue;
//判断是否有数据
if ([metadataObjects count] >0){
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];
stringValue = metadataObject.stringValue;
[session stopRunning];
}
if (stringValue && stringValue.length > 0) {
//stringValue就是扫描二维码后得到的信息
NSLog(@"stringValue==%@",stringValue);
}
resultTextView.text = stringValue;
}
以上就是扫描二维码的主要代码,如果需要加上一条线不停的滚动,只需要定时器控制一条线不停的上下滑动即可。