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

96
作者 无夜之星辰
2017.03.16 13:03* 字数 308

允儿镇楼.

效果图


扫二维码.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管理,万一更新的时候把你的代码清理掉就不好耍了。😅(我这里做了下反面教材)

iOS开发