iOS版本高仿新版微信V8.0.6扫一扫。支持全屏扫码,支持识别多个二维码,支持选择指定二维码,支持从相册选取二维码,支持光线暗打开手电筒。无需多余的文件,一个Controller即可搞定,可继承,可复用,可自定义。
部分代码如下:
/**
* 根据光线强度自动显示手电筒图标
*/
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];
CFRelease(metadataDict);
NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];
float brightnessValue = [[exifMetadata objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue];
dispatch_async(dispatch_get_main_queue(), ^{
if (brightnessValue<brightnessThresholdValue) {
self.flashBtn.hidden = NO;
}else{
if (!self.flashBtn.isSelected) {
self.flashBtn.hidden = YES;
}
}
});
}
/**
* 识别结果处理
*/
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
if (metadataObjects != nil && metadataObjects.count > 0) {
[self stopRunning];
UIImpactFeedbackGenerator*impactLight = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleLight];
[impactLight impactOccurred];
UIView * maskView = [self maskView:metadataObjects.count > 1];
maskView.alpha = 0;
[self.view addSubview:maskView];
[UIView animateWithDuration:0.6 animations:^{
maskView.alpha = 1;
}];
ZTScanBarInfo *barInfo = [ZTScanBarInfo new];
barInfo.codeView = maskView;
barInfo.codeResult = @"";
[self.barInfos addObject:barInfo];
[metadataObjects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
AVMetadataMachineReadableCodeObject * code = (AVMetadataMachineReadableCodeObject*)
[self.videoPreviewLayer transformedMetadataObjectForMetadataObject:obj];
UIButton *codeBtn = [self codeButtonWithFrame:code.bounds icon:metadataObjects.count > 1];
codeBtn.tag = idx+1;
[self.view addSubview:codeBtn];
ZTScanBarInfo *barInfo = [ZTScanBarInfo new];
barInfo.codeView = codeBtn;
barInfo.codeResult = code.stringValue;
[self.barInfos addObject:barInfo];
}];
self.backBtn.hidden = YES;
if(metadataObjects.count == 1){
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
ZTScanBarInfo *barInfo = self.barInfos[1];
NSLog(@"%@",barInfo.codeResult);
[self handelCodeResult:barInfo.codeResult];
});
}
} else {
NSLog(@"暂未识别出扫描的二维码");
}
}
效果图如下:
下载链接如下: