IOS开发 扫描二维码
来源:互联网 发布:telnet使用什么端口 编辑:程序博客网 时间:2024/05/17 13:09
//加入头文件
#import <AVFoundation/AVFoundation.h>
//代理AVCaptureMetadataOutputObjectsDelegate
@property (nonatomic,strong)AVCaptureSession *session;//输入输出的中间桥梁
//设置AVCaptureMetadataOutput 的rectOfInterest的属性就可以了 这样设置就可以:CGRectMake(y的起点/屏幕的高,x的起点/屏幕的宽,扫描的区域的高/屏幕的高,扫描的区域的宽/屏幕的宽)
@property (nonatomic,strong)AVCaptureMetadataOutput *output;//设置全屏显示,但是实际扫描区域只在一个框内
//判断是否有相机的访问权限
if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:nilmessage:@"现在无法访问您的相机,请前往\"设置\"-\"隐私\"-\"相机\"选项中,允许住逻辑访问您的相机"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"去授权",nil];
[alertView show];
// NSLog(@"相机权限受限");
}else{
//成功后调用方法
[self createSTQCode];
}
-(void)createSTQCode{
//判断报的是什么错获取系统的错误信息
// NSError *error;
//获取摄像设备
AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput *input = [AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:nil];
//创建输出流
_output = [[AVCaptureMetadataOutputalloc]init];
//设置代理在主线程里刷新
[_outputsetMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
//初始化连接对象
self.session = [[AVCaptureSessionalloc]init];
//高质量采集率
[self.sessionsetSessionPreset:AVCaptureSessionPresetHigh];
[self.sessionaddInput:input];
[self.sessionaddOutput:_output];
// 指明 扫描的是条形码还是二维码必须放在 [self.session addOutput:output];后面 不然会崩
[_outputsetMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];//二维码
// //设置扫码支持的编码格式(如下设置条形码和二维码兼容)
// output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayerlayerWithSession:self.session];
layer.videoGravity =AVLayerVideoGravityResizeAspectFill;
layer.frame =self.layer.bounds;
[self.layerinsertSublayer:layeratIndex:0];
//开始捕获
[self.sessionstartRunning];
}
-(void)captureOutput:(AVCaptureOutput*)captureOutput didOutputMetadataObjects:(NSArray*)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if (metadataObjects.count >0) {
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjectsobjectAtIndex :0 ];
NSString *str = metadataObject.stringValue;
//str 就是扫描的数据
NSLog(@"%@",str);
}else
{
NSLog(@"没有扫描到数据");
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1 && [UIDevice currentDevice].systemVersion.floatValue >=8.0) {
//没有相机权限的时候 直接跳转到设置界面
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]];
}
}
- IOS开发 扫描二维码
- 二维码扫描ios开发
- iOS开发扫描二维码
- iOS开发二维码扫描
- iOS开发-二维码扫描
- iOS开发之二维码扫描
- iOS 开发 二维码扫描详解
- iOS开发之 二维码生成/二维码扫描
- iOS开发技术 - 二维码扫描、生成
- 学习iOS开发之扫描二维码
- IOS 开发学习十九 二维码扫描-QRCodeReaderViewController
- IOS开发二维码生成及扫描ZBarDemo
- iOS开发-二维码扫描和应用跳转
- iOS开发-二维码扫描和应用跳转
- iOS开发二维码生成和扫描
- iOS开发-二维码扫描和应用跳转
- iOS开发 二维码扫描和生成
- ios 开发之 扫描二维码和生成二维码
- 线程下载图片的问题
- 带有指示器的progressbar
- Android中自定义ContentProvider及用法
- C/C++小知识总结之四
- HQL语法与详细解释[整理]
- IOS开发 扫描二维码
- 从原理上搞定编码-- Base64编码
- 美团Android资源混淆保护实践 - 美团技术团队
- Java多线程总结(1) — 创建线程的两种方式
- 向Android源码目录添加新的git目录
- 基础排序
- DEDECMS文章系统另类内链方法
- Android Studio 工程依赖问题
- 10022---JavaScript--DOM HTML与CSS