前言
掃一掃還是借助原生煤墙,原生掃描很強(qiáng)勢,封裝掃描工具類馍刮,閃光燈信夫,掃描View,借助第三方照片選擇器TZImagePickerController實現(xiàn)相冊選中識別二維碼。
代碼
掃一掃使用方法:
1卡啰、配置
self.scanManager = [LXQRCodeScanManager sharedManager];
NSArray *arr = @[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
// AVCaptureSessionPreset1920x1080 推薦使用静稻,對于小型的二維碼讀取率較高
[_scanManager setupSessionPreset:AVCaptureSessionPreset1920x1080 metadataObjectTypes:arr currentController:self];`
2、處理掃描結(jié)果回調(diào) 以及 光線對閃光燈的控制
//掃描結(jié)果回調(diào)
[_scanManager scanResult:^(NSArray *metadataObjects) {
// NSLog(@"metadataObjects - - %@", metadataObjects);
if (metadataObjects != nil && metadataObjects.count > 0) {
[weakSelf.scanManager palySoundName:@"sound.caf"];
AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
NSString *url =[obj stringValue];
LXQRResultController *Vc =[[LXQRResultController alloc]init];
Vc.navTitle = @"掃描結(jié)果";
if ([url hasPrefix:@"http"]) {
Vc.url = url;
}
[weakSelf.navigationController pushViewController:Vc animated:YES];
} else {
[NSObject showMessag:@"暫未識別出掃描的二維碼" toView:weakSelf.view afterDelay:1];
}
}];
//光線變化回調(diào)
[_scanManager brightnessChange:^(CGFloat brightness) {
[weakSelf.scanView lightBtnChangeWithBrightnessValue:brightness];
}];
相冊識別二維碼跳轉(zhuǎn):
#pragma mark---借助第三方相冊
- (void)rightBarButtonItenAction {
TZImagePickerController *pickerController = [[TZImagePickerController alloc]initWithMaxImagesCount:1 delegate:self];
WS(weakSelf);
[pickerController setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photo, NSArray *assets, BOOL isSelectOriginalPhoto){
// NSLog(@"%@",photo);
UIImage *image = photo[0];
// CIDetector(CIDetector可用于人臉識別)進(jìn)行圖片解析碎乃,從而使我們可以便捷的從相冊中獲取到二維碼
// 聲明一個 CIDetector,并設(shè)定識別類型 CIDetectorTypeQRCode
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyHigh}];
// 取得識別結(jié)果
NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
NSString *resultStr;
if (features.count == 0) {
[NSObject showMessag:@"暫未識別出二維碼" toView:self.view afterDelay:1];
}else{
for (int index = 0; index < [features count]; index ++) {
CIQRCodeFeature *feature = [features objectAtIndex:index];
resultStr = feature.messageString;
}
LXQRResultController *Vc =[[LXQRResultController alloc]init];
Vc.navTitle = @"掃描結(jié)果";
if ([resultStr hasPrefix:@"http"]) {
Vc.url = resultStr;
}
[weakSelf.navigationController pushViewController:Vc animated:YES];
}
}];
[self presentViewController:pickerController animated:YES completion:nil];
}
效果圖:最后
demo地址:LXQRCode