使用zbar调用相机扫码代码:
//打开相机
- (void) init_camera
{
self.navigationController.navigationBarHidden=YES;
[common addNavigationAddToView:self.view Info:@"二维码" Target:self action:@selector(returnbtn:) PatientName:@"扫码"];
UIButton *rightBtn=[UIButton buttonWithType:UIButtonTypeCustom];
[rightBtn setFrame:CGRectMake(kScreenWidth-18-40, 19, 40, 40)];
[rightBtn setTitle:@"相册" forState:UIControlStateNormal];
[rightBtn.titleLabel setFont:[UIFont systemFontOfSize:16]];
[self.view addSubview:rightBtn];
[rightBtn addTarget:self action:@selector(rightBtnClick) forControlEvents:UIControlEventTouchUpInside];
//开启zbar封装好的拍照界面
ZBarReaderView * reader = [ZBarReaderView new];
ZBarImageScanner * scanner = [ZBarImageScanner new];
[scanner setSymbology:ZBAR_PARTIAL config:0 to:0];
reader.readerDelegate = self;
const float h = [UIScreen mainScreen].bounds.size.height;
const float w = [UIScreen mainScreen].bounds.size.width;
CGRect reader_rect1 = CGRectMake(0, 60, w, h-60);//全屏模式
reader.frame = reader_rect1;
reader.backgroundColor = [UIColor redColor];
[reader start];
[self.view addSubview: reader];
//添加覆盖视图
_overLayView = [[ZbarOverlayView alloc]initWithFrame:CGRectMake(0, 0, reader.frame.size.width, reader.frame.size.height)];
//[_overLayView startAnimation];
_overLayView.transparentArea = CGRectMake(50, 100, kScreenWidth-100, kScreenWidth-100);//设置中间可选框大小
[reader addSubview:_overLayView];
//设置扫描识别框
reader.scanCrop=CGRectMake(0, 0, 1, 1);
}
//扫描结果的代理方法
#pragma mark - ZbarReaderView Delegate
- (void) readerView:(ZBarReaderView *)readerView didReadSymbols: (ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
ZBarSymbol * s = nil;
for (s in symbols)
{
//s.data为识别到的二维码转换的信息,开发者进行各种处理
[self getTicketDetailInfo:s.data];
break;
}
//如果没有扫描到二维码信息,进行报错提示
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"没有识别到图片中二维码" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alert show];
}
//调用相册图片并识别其中二维码信息代码:
定义全局变量:ZBarReaderController *imagePicker;
//打开相册操作
ZBarReaderController相当于对bar系统相册的一个封装
-(void)rightBtnClick
{
imagePicker = [ZBarReaderController new];
imagePicker.allowsEditing = NO ;
imagePicker.showsHelpOnFail = NO;
imagePicker.readerDelegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:imagePicker animated:YES completion:nil];
}
#pragma mark - ZBarReaderController ReadDelegate
//相册选取图片后的代理方法对应ZBarReaderController
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results) {
NSLog(@"symbol:%@", symbol);
break;
}
[imagePicker dismissViewControllerAnimated:YES completion:nil];
//二维码字符串
NSString *QRCodeString = symbol.data;
//处理二维码图片信息
[self getTicketDetailInfo:QRCodeString];
}
//选择图片没有二维码信息的代理方法
-(void)readerControllerDidFailToRead:(ZBarReaderController *)reader withRetry:(BOOL)retry
{
if (retry) {
//retry == 1 选择图片为非二维码。
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"没有识别到图片中二维码" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alert show];
[self dismissViewControllerAnimated:YES completion:nil];
}
return;
}