给二维码图片添加长按手势:
UILongPressGestureRecognizer *QrCodeTap = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(qrCodeLongPress:)];
self.qrcodeImage.userInteractionEnabled = YES;
[self.qrcodeImage addGestureRecognizer:QrCodeTap];
长按手势响应方法:
CIQRCodeFeature对象就是二维码包含的内容
- (void)qrCodeLongPress:(UILongPressGestureRecognizer *)pressSender {
if (pressSender.state != UIGestureRecognizerStateBegan) {
return;//长按手势只会响应一次
}
UIImageView *imgV = (UIImageView *)pressSender.view;
//创建上下文
CIContext *context = [[CIContext alloc] init];
//创建一个探测器
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy: CIDetectorAccuracyLow}];
//直接开始识别图片,获取图片特征
CIImage *imageCI = [[CIImage alloc] initWithImage:imgV.image];
NSArray *features = [detector featuresInImage:imageCI];
CIQRCodeFeature *codef = (CIQRCodeFeature *)features.firstObject;
//弹出选项列表
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *saveAction = [UIAlertAction actionWithTitle:@"保存到相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
UIImageWriteToSavedPhotosAlbum(imgV.image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);
}];
UIAlertAction *identifyAction = [UIAlertAction actionWithTitle:@"识别二维码" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"%@", codef.messageString);
}];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}];
[alert addAction:saveAction];
[alert addAction:identifyAction];
[alert addAction:cancelAction];
[alertController presentViewController:alert animated:YES completion:nil];
}
保存到相册的回调:
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
if (!error) {
[DZStatusHud showToastWithTitle:@"保存成功" complete:nil];
}
}
网友评论