iOS系统自带二维码的生成以及扫描
2016-07-29 09:46
471 查看
1.二维码生成
// 1.实例化二维码滤镜
CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];
// 2.恢复滤镜的默认属性(因为滤镜有可能保存上一次的属性)
[filter setDefaults];
// 3.将字符串转换成NSData
NSString *str =@"这是一句话";
NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];
// 4.通过KVC设置滤镜传入data,将来滤镜就知道要通过传入的数据生成二维码
[filter setValue:dataforKey:@"inputMessage"];
// 5.获得滤镜输出的图像(生成二维码)
CIImage *outputImage = [filteroutputImage];
UIImage *image = [UIImageimageWithCIImage:outputImage];
// 6.设置生成好的二维码到imageView上,全局创建的imageView,自己随意设置
self.imageView.image
= image;
2.二维码扫描
//1.实例化拍摄设备
AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
//2.设置输入设备
AVCaptureDeviceInput *input =[AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:nil];
//3 设置元数据输出
//3.1 实例化拍摄元数据输出
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutputalloc]init];
//3.2 设置输出数据代理
[output setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
// 4 添加拍摄会话
self.session = [[AVCaptureSessionalloc]init];
// 4.1 添加会话输入
[self.sessionaddInput:input];
// 4.2 添加会话输出
[self.sessionaddOutput:output];
// 4.3 设置输出类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
// 5.视频预览图层
// 5.1实例化预览图层,传递_session是为了告诉将来图层显示什么内容
self.Layer = [AVCaptureVideoPreviewLayerlayerWithSession:_session];
_Layer.videoGravity =AVLayerVideoGravityResizeAspectFill;
_Layer.frame =CGRectMake(30,100,300,300);
// 5.2 将图层插入当前视图
[self.view.layerinsertSublayer:_LayeratIndex:0];
// 启动会话
[_sessionstartRunning];
3.二维码扫描代理事件
- (void)captureOutput:(AVCaptureOutput
*)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection
{
// 1.如果扫描完成,停止会话
[self.sessionstopRunning];
// 2.删除预览图层
[_LayerremoveFromSuperlayer];
// 3.设置界面显示扫描结果,如果是url,打开连接,如果不是,输出内容及显示提示框
AVMetadataMachineReadableCodeObject * metadataObject = metadataObjects[0];
NSURL * url = [NSURLURLWithString:metadataObject.stringValue];
if ([[UIApplicationsharedApplication]canOpenURL:
url]) {
[[UIApplicationsharedApplication]openURL:
url];
} else {
UIAlertView * alertView = [[UIAlertViewalloc]initWithTitle:@"警告"message:
[NSStringstringWithFormat:@"%@:%@",@"无法解析的二维码",metadataObject.stringValue]delegate:nilcancelButto
8b42
nTitle:@"确定"otherButtonTitles:nil];
[alertViewshow];
}
}
// 1.实例化二维码滤镜
CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];
// 2.恢复滤镜的默认属性(因为滤镜有可能保存上一次的属性)
[filter setDefaults];
// 3.将字符串转换成NSData
NSString *str =@"这是一句话";
NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];
// 4.通过KVC设置滤镜传入data,将来滤镜就知道要通过传入的数据生成二维码
[filter setValue:dataforKey:@"inputMessage"];
// 5.获得滤镜输出的图像(生成二维码)
CIImage *outputImage = [filteroutputImage];
UIImage *image = [UIImageimageWithCIImage:outputImage];
// 6.设置生成好的二维码到imageView上,全局创建的imageView,自己随意设置
self.imageView.image
= image;
2.二维码扫描
//1.实例化拍摄设备
AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
//2.设置输入设备
AVCaptureDeviceInput *input =[AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:nil];
//3 设置元数据输出
//3.1 实例化拍摄元数据输出
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutputalloc]init];
//3.2 设置输出数据代理
[output setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
// 4 添加拍摄会话
self.session = [[AVCaptureSessionalloc]init];
// 4.1 添加会话输入
[self.sessionaddInput:input];
// 4.2 添加会话输出
[self.sessionaddOutput:output];
// 4.3 设置输出类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
// 5.视频预览图层
// 5.1实例化预览图层,传递_session是为了告诉将来图层显示什么内容
self.Layer = [AVCaptureVideoPreviewLayerlayerWithSession:_session];
_Layer.videoGravity =AVLayerVideoGravityResizeAspectFill;
_Layer.frame =CGRectMake(30,100,300,300);
// 5.2 将图层插入当前视图
[self.view.layerinsertSublayer:_LayeratIndex:0];
// 启动会话
[_sessionstartRunning];
3.二维码扫描代理事件
- (void)captureOutput:(AVCaptureOutput
*)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection
{
// 1.如果扫描完成,停止会话
[self.sessionstopRunning];
// 2.删除预览图层
[_LayerremoveFromSuperlayer];
// 3.设置界面显示扫描结果,如果是url,打开连接,如果不是,输出内容及显示提示框
AVMetadataMachineReadableCodeObject * metadataObject = metadataObjects[0];
NSURL * url = [NSURLURLWithString:metadataObject.stringValue];
if ([[UIApplicationsharedApplication]canOpenURL:
url]) {
[[UIApplicationsharedApplication]openURL:
url];
} else {
UIAlertView * alertView = [[UIAlertViewalloc]initWithTitle:@"警告"message:
[NSStringstringWithFormat:@"%@:%@",@"无法解析的二维码",metadataObject.stringValue]delegate:nilcancelButto
8b42
nTitle:@"确定"otherButtonTitles:nil];
[alertViewshow];
}
}
相关文章推荐
- iOS自带扫描 和 生成二维码
- iOS自带扫描 和 生成二维码
- iOS自带扫描 和 生成二维码
- iOS自带扫描和生成二维码
- iOS自带扫描 和 生成二维码
- ios播放系统自带音效以及震动
- iOS中系统自带正则表达式的应用以及一些常用的正则表达式
- iOS系统自带的 **UIAlertView** 以及 屏幕自动旋转的实现
- iOS 二维码的生成和扫描
- 扫描二维码自动识别手机系统(Android/IOS)跳转不同页面
- ios 自带的二维码生成
- iOS平台 二维码生成和扫描
- 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)
- 使用 IOS 自带 API 扫描二维码
- IOS开发二维码生成及扫描ZBarDemo
- 扫描二维码自动识别手机系统(Android/IOS)
- iOS 条形码 二维码 的生成 和 扫描 zBarSDK zXing
- ios播放系统自带音效以及震动
- iOS自带的二维码扫描功能
- iOS生成二维码,以及二维码扫描