这是阅读各种 AVMetadataObjectType 对象(如 EAN13、QR Code、Aztec Codes 等)及甚至 面部检测,以及其他条形码的最公平、最智能和最简单的方法,只需 iOS 7+ 设备的 一个方法调用。
默认情况下,Robocop 已经设置为直接读取 QR Code。
pod install
。pod 'Robocop'
它会安装 Robocop 的最新版本。
或者,您可以复制 Classes/
目录下的所有文件到您的项目中。请确保已检查 '将项复制到目标组文件夹'。
typedef void (^RobocopCodeReaderHandler)(NSString *machineCodeString);
您将得到一个回调,同时还有读取到的代码的字符串表示。
typedef void (^RobocopRectOfInterestHandler)(CGRect rectOfInterest);
您将得到一个 CGRect
,它表示图片中对象(包括条形码/面部)的边界矩形。
#import "Robocop.h"
[[Robocop sharedInstance]
startReadingInView:self.view
readerHandler:^(NSString *machineCodeString) {
NSLog(@"Code: %@", machineCodeString);
} rectOfInterestHandler:^(CGRect rectOfInterest) {
// The rect for the barcode being read
// See code example to know how to add a highlight layer using this rect on top of your preview
NSLog(@"%@", NSStringFromCGRect(rectOfInterest));
}];
- (void)startReadingMachineReadableCodeObjects:(NSArray *)codeObjects
inView:(UIView *)preview
readerHandler:(DHCodeReaderHandler)readerHandler
rectOfInterestHandler:(DHReaderRectOfInterestHandler)rectOfIntesetHandler;
使用此方法传递包含您希望读取器能够区分的 AVMetadataObjectType 对象的数组。
例如
NSArray *codeTypes = @[AVMetadataObjectTypeFace, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeQRCode];
以下是使用上述提到的数组使用该方法的示例
[[Robocop sharedInstance]
startReadingMachineReadableCodeObjects:codeTypes
inView:self.view
readerHandler:^(NSString *machineCodeString) {
NSLog(@"Code: %@", machineCodeString);
} rectOfInterestHandler:^(CGRect rectOfInterest) {
NSLog(@"%@", NSStringFromCGRect(rectOfInterest));
}];
您可以读取的所有代码类型均在 AVFoundation/AVMetadataObject.h
中声明
如果您想检测所有类型的代码,只需将上述方法的 codeObjects 数组传递为 nil。
[[Robocop sharedInstance]
startReadingMachineReadableCodeObjects:nil
inView:self.view
readerHandler:^(NSString *machineCodeString) {
NSLog(@"Code: %@", machineCodeString);
} rectOfInterestHandler:^(CGRect rectOfInterest) {
NSLog(@"%@", NSStringFromCGRect(rectOfInterest));
}];
- (void)stop;
很简单,对吧?
当然,请发送 pull-request 或者提出问题。了解如何改进事物总是好事,耶!
David Hernandez ([email protected])
Robocop 在 MIT 许可证之下。