直接上代码:
0.代理协议
UIImagePickerControllerDelegate, UINavigationControllerDelegate
1.定义
@property (strong, nonatomic) CIDetector *detector;
2.“相册”按钮的点击事件
-(void)clickRightBarButton:(UIBarButtonItem*)item { self.detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }]; UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = NO; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self.navigationController presentViewController:picker animated:YES completion:nil]; }
3.照片选择后的代理方法
- ( void )imagePickerController:( UIImagePickerController *)picker didFinishPickingMediaWithInfo:( NSDictionary *)info { [picker dismissViewControllerAnimated:YES completion:nil]; UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; if (!image){ image = [info objectForKey:UIImagePickerControllerOriginalImage]; } NSArray *features = [self.detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]]; if (features.count >=1) { CIQRCodeFeature *feature = [features objectAtIndex:0]; NSString *scannedResult = feature.messageString; NSLog(@" ---- %@", scannedResult); NSArray *typeArray = [scannedResult componentsSeparatedByString:@","]; if (typeArray.count <= 0) { return; } // 分析扫描结果 [self analyzeQRCode:typeArray]; } }