美文网首页iOS进阶iOS开发实用技术程序员
iOS开发笔记 | 借助并修改三方库实现二维码和条码扫描功能

iOS开发笔记 | 借助并修改三方库实现二维码和条码扫描功能

作者: Lol刀妹 | 来源:发表于2017-03-16 13:03 被阅读1137次
    允儿镇楼.

    效果图

    扫二维码.gif 扫条码.gif

    这个网站可以生成二维码:
    二维码生成网站

    借助的三方库:

    QRCodeReaderViewController

    使用方法:

    1. 为适配iOS10+,将权限打开

    PS:常用权限:

    <key>NSAppleMusicUsageDescription</key>
    <string>App需要您的同意,才能访问媒体资料库</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>App需要您的同意,才能访问蓝牙</string>
    <key>NSCalendarsUsageDescription</key>
    <string>App需要您的同意,才能访问日历</string>
    <key>NSCameraUsageDescription</key>
    <string>App需要您的同意,才能访问相机</string>
    <key>NSHealthShareUsageDescription</key>
    <string>App需要您的同意,才能访问健康分享</string>
    <key>NSHealthUpdateUsageDescription</key>
    <string>App需要您的同意,才能访问健康更新 </string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>App需要您的同意,才能始终访问位置</string>
    <key>NSLocationUsageDescription</key>
    <string>App需要您的同意,才能访问位置</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>App需要您的同意,才能访问麦克风</string>
    <key>NSMotionUsageDescription</key>
    <string>App需要您的同意,才能访问运动与健身</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>App需要您的同意,才能访问相册</string>
    <key>NSRemindersUsageDescription</key>
    <string>App需要您的同意,才能访问提醒事项</string>
    
    2. 导入这个库

    pod 'QRCodeReaderViewController', '~> 4.0.2'

    3. 使用
    • 创建
    #pragma mark - 扫描二维码或条码
    /** 扫描二维码或条码 */
    - (void)scan{
        // Create the reader object
        QRCodeReader *reader = [QRCodeReader readerWithMetadataObjectTypes:@[AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypeQRCode]];
        
        // Instantiate the view controller
        QRCodeReaderViewController *vc = [QRCodeReaderViewController readerWithCancelButtonTitle:@"取消" codeReader:reader startScanningAtLoad:YES showSwitchCameraButton:YES showTorchButton:YES];
        
        // Set the presentation style
        vc.modalPresentationStyle = UIModalPresentationPopover;
        
        // Define the delegate receiver
        vc.delegate = (id)self;
        
        [self presentViewController:vc animated:YES completion:nil];
    }
    
    • 然后在它的代理方法里面进行后续处理
    #pragma mark - 二维码扫描相关代理方法
    // 扫描成功
    - (void)reader:(QRCodeReaderViewController *)reader didScanResult:(NSString *)result
    {
        [reader stopScanning]; // 停止扫描
        [SVProgressHUD showSuccessWithStatus:[NSString stringWithFormat:@"扫描结果:%@",result]];
    }
    
    // 取消扫描
    - (void)readerDidCancel:(QRCodeReaderViewController *)reader
    {
        [reader dismissViewControllerAnimated:YES completion:^{
            [SVProgressHUD showInfoWithStatus:@"取消扫描"];
        }];
    }
    
    4. 对三方库的修改

    注:没修改前只能扫二维码,不能扫条码,修改后都能扫了。


    修改1
    修改2

    Demo

    详情请查看demo
    二维码\条码扫描小demo

    鸣谢

    感谢欧阳大神的指点:@moonCoder 😄


    补充

    后面测试的时候发现不是所有的条码都能扫描,于是百度了一下发现:

    条码不止一种🙄
    为了可以扫描尽可能多的条码,就在数组中把所有类型都加上了:

    注:pod中的两个文件都要加。(已更新GitHub)
    这样就可以扫描更多种类的条码了。
    最后注意一点:对于要手动修改的三方库,最好不要用CocoaPods管理,万一更新的时候把你的代码清理掉就不好耍了。😅(我这里做了下反面教材)

    相关文章

      网友评论

      • 嘻嘻嘻小八哥:大神,怎么实现让条形码一进入框内,就可以实现扫描呢,现在是必须放到扫描中心点,才可以实现扫描
        Lol刀妹:@嘻嘻嘻小八哥 这个我真没思路,如果你有新发现请告诉我:joy:
        嘻嘻嘻小八哥:@无夜之星辰 因为项目扫描是一个重要功能,要求实现类似,微信那种,一进入就可以识别,因为条形码比较特殊,扫描点在中心,改了好几个三方,效果都不太好,就问下大神有什么思路吗:smile:
        Lol刀妹:@嘻嘻嘻小八哥 为什么会有这种需求:joy:

      本文标题:iOS开发笔记 | 借助并修改三方库实现二维码和条码扫描功能

      本文链接:https://www.haomeiwen.com/subject/otcrnttx.html