iOS7+ 扫描二维码和条形码实现 耗时操作

iOS7以前都是用Zxing Zbar 来实现 扫描二维码以及条形码,从iOS7 出来后,系统自带API很强大,渐渐也就放弃了Zxing Zbar的使用,

直接上主要代码:

- (void)setupCamera

{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        [HUDUtils showHUDProgress:@""];

    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

        if (authStatus == AVAuthorizationStatusAuthorized) {//已经授权

        }else { //没有授权

            NSString *recommand;

            if (IS_IOS_8) {

                recommand = @"无法打开相机,请去设置中打开后继续操作\n设置->好点商家->相机";

            }else{

                recommand = @"无法接收推送消息,请去设置中打开后继续操作\n设置->隐私->相机->好点商家";

            }

            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:recommand delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

            [alert show];

            return;

        }

        /// Device

        _device  = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

        // Input

        _input   = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];

        // Output

        _output  = [[AVCaptureMetadataOutput alloc] init];

        [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

        _output.rectOfInterest = self.scanImageView.bounds;

        // Session

        _session = [[AVCaptureSession alloc]init];

        [_session setSessionPreset:AVCaptureSessionPresetHigh];

        if ([_session canAddInput:self.input])

        {

            [_session addInput:self.input];

        }

        if ([_session canAddOutput:self.output])

        {

            [_session addOutput:self.output];

        }

        // 条码类型 AVMetadataObjectTypeQRCode

        _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeUPCECode];

    dispatch_async(dispatch_get_main_queue(), ^{

    // Preview

        [HUDUtils dismiss];

        _preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session];

        _preview.videoGravity = AVLayerVideoGravityResizeAspectFill;

        _preview.frame        = self.view.frame;

        [self.view.layer insertSublayer:self.preview atIndex:0];

        /* 配置取景框之外颜色开始 */

        // scanCrop

        UIView *viewTopScan =

        [[UIView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, self.scanImageView.top)];

        UIView *viewBottomScan =

        [[UIView alloc] initWithFrame:CGRectMake(0, self.scanImageView.bottom,

                                             ScreenWidth,

                                             ScreenHeight - self.scanImageView.bottom)];

        UIView *viewLeftScan =

        [[UIView alloc] initWithFrame:CGRectMake(0, self.scanImageView.top, (ScreenWidth-self.scanImageView.width)/2, self.scanImageView.height)];

        UIView *viewRightScan =

        [[UIView alloc] initWithFrame:CGRectMake(self.scanImageView.right,

                                             self.scanImageView.top,

                                             (ScreenWidth-self.scanImageView.width)/2,

                                             self.scanImageView.height)];

        viewTopScan.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.2];

        viewBottomScan.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.2];

        viewLeftScan.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.2];

        viewRightScan.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.2];

        [self.view addSubview:viewTopScan];

        [self.view addSubview:viewBottomScan];

        [self.view addSubview:viewLeftScan];

        [self.view addSubview:viewRightScan];

        /* 配置取景框之外颜色结束 */

        self.contentLable.layer.cornerRadius = self.contentLable.height / 2 ;

        self.contentLable.layer.backgroundColor = [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8] CGColor];

        // Start

        [_session startRunning];

        });

    });

}

有一点需要注意,在初始化相机的时候,会耗时,在iPhone 4 机器上体现的尤为明显,也很简单,加上一个异步操作解决问题.

时间: 2024-10-13 08:00:00

iOS7+ 扫描二维码和条形码实现 耗时操作的相关文章

ios开发之----扫描二维码、条形码

1.搭建扫描二维码的界面.可采用storyboard来搭建 2.创建对象的控制器类来管理二维码的扫描 3.在这个类中导入 #import <AVFoundation/AVFoundation.h> 框架 4.在viewDidLoad中调用 1 [self setUpQrcode]; 5.实现上面的方法 - (void)setUpQrcode { // 1.获取输入设备 AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWi

Android开发学习之基于相机扫描二维码、条形码等

蛰伏半月有余,一直在准备期末考试,期间抽空研究了一些Android的源代码,现在我就把在这其中的一些收获分享给大家. 今天想分享给大家的是二维码扫描.说起二维码,大家一定不会陌生,尤其是微信火了以后,在我们的生活中几乎随处都可以看到二维码的影 子.相关科技媒体甚至把二维码当成是未来移动互联网的入口,因此研究二维码的相关技术就显得意义非凡.目前在移动开发领域,使用最为广泛的二 维码库有两个,分别是ZXing和ZBar,其中ZXing在Android开发中较为常见,而ZBar则在IOS开发中较为常见

在iOS中使用ZBar扫描二维码和条形码

最近做了个外包项目,里面用到了二维码扫描和微信支付!之前比较熟悉的是ZXing,但是在Xcode7.1里面发现竟然莫名的不支持,木有办法,从网上查了一下还有一种支持二维码扫描的东西,没错就是接下来我要说的东东,二维码扫描的利器 ZBarSDK.闲言少絮叨,言归正传! 1.下载 ZBarSDK 官网 https://github.com/bmorton/ZBarSDK 2.导入如下框架 3.在AppDelegetem文件中#import "ZBarSDK.h" 并且 在 - (BOOL)

对于ios7扫描二维码功能的实现

在ios7曾经,我们开发二维码扫描,或者生产都须要借助第三方的开源库进行开发. 然后升级到ios7时,在passbook中苹果自带二维码扫描功能,并且扫描速度很快,秒杀一切第三方开源库. 所以,我们做二维码的开发选用自带sdk优先级应该高于其它的库. 说到二维码的开发.我们须要用到这两个对象.例如以下. . @property (nonatomic,strong) AVCaptureSession *captureSession; @property (nonatomic,strong) AVC

打开手机摄像头扫描二维码或条形码全部操作

(1)下载二维码的库源码 链接:http://pan.baidu.com/s/1pKQyw2n 密码:r5bv 下载完成后打开可以看到 libzxing 的文件夹,最后添加进 Android  Studio,操作 :File------>New----->Import  Moudle (2)按钮单击事件为  scanner 后台代码: public void scanner(View view){ startActivityForResult(new Intent(ScanActivity.t

iOS之使用ZbarSDK实现扫描二维码以及条形码功能

1.去下载ZbarSDK. 2.新建你的IOS Project. 3.导入ZbarSDK,直接拖动你下载的ZbarSDK到你的项目,并且选择copy选项. 4.添加如下framework 5.在appDelegate文件的以下方法中加入如下: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //your code [ZBar

Android二维码开源项目zxing用例简化和生成二维码、条形码

上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的测试程序:CaptureActivity比较复杂,我只要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自不必说了. 自带的例子,目录结构如下: 修改后的程序目录结构,去掉了很多功能,如果分享.设置等. 先上效果图          扫描ZXing生成的条形码和二维码结果 扫描界面 扫描商品的条码 整个程序只修改了以下两个类,其它都是直接从原来的Demo中复制出来的 生成二维码的代码 /** * 生成二维

zBar扫描二维码时闪光灯自动打开问题

相信大家对zBar并不陌生,比较常用的扫描二维码和条形码的第三方库,在这不做过多解释. 我要说的是,有种场景我们在扫描二维码时,周围环境比较阴暗,光线不好,这个时候我们需要去开灯.这个时候的需求是我们如果能打开手机自带的闪光灯就好了. 到这一步并不难,网上也有很多关于打开手机闪光灯的代码,在这里我也贴出来一份: <span style="font-size:14px;">- (void)openLight:(UIButton *)sender { AVCaptureDevi

二维码、条形码扫描——使用Google ZXing

我在项目中用到了二维码扫描的技术,用的是Google提供的ZXing开源项目,它提供二维码和条形码的扫描.扫描条形码就是直接读取条形码的内容,扫描二维码是按照自己指定的二维码格式进行编码和解码. 可以到http://code.google.com/p/zxing/下载ZXing项目的源码,然后按照官方文档进行开发,我这里使用的ZXing是经过简化版的,去除了一些一般使用不必要的文件,项目工程截图如下: 其中encoding包是我在它的基础上自己加上去的,功能是根据传入的字符串来生成二维码图片,返