This article will introduce how to use the scan feature in conjunction with the official scan demo.
To use the scan feature in baseline version 10.1.60 and above and before 10.2.3.5, please refer to Use scan in the default UI and Use Scan in custom UI.
To use the scan feature in baseline version 10.2.3.5 and above, please refer to Multi-code recognition.
Use scan in the default UI
Modify the parameters on the scan page in the default UI.
- (void)custoDefaultScan {
TBScanViewController *vc = [[MPScanCodeAdapterInterface sharedInstance] createDefaultScanPageWithallback:^(id _Nonnull result, BOOL keepAlive) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:result[@"resp_result"] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
alert.tag = 1001;
[alert show];
}];
[self.navigationController pushViewController:vc animated:YES];
self.scanVC = vc;
// Set the scan page title
vc.title = @"Standard scan";
// Set the tooltip "Turn on the torch."
vc.torchStateNormalTitle = @"Turn on the torch";
// Set the tooltip "Turn off the torch."
vc.torchStateSelectedTitle = @"Turn off the torch";
// Set the type of the object that you want to scan.
vc.scanType = ScanType_QRCode;
// Set a Select Album button.
vc.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:APCommonUILoadImage(@"camera") style:UIBarButtonItemStylePlain target:self action:@selector(selectPhotos)];
}
- (void)selectPhotos
{
[self.scanVC scanPhotoLibrary];
}Use Scan in custom UI
If you want to customize the entire scan UI, you can customize the scan page and make it inherit TBScanViewController.
Create a scan page and customize the scan area.
@interface MPScanCodeViewController : TBScanViewController <TBScanViewControllerDelegate> @end @implementation MPScanCodeViewController - (instancetype)init { if (self = [super init]) { self.delegate = self; self.scanType = ScanType_All_Code; } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.title = @"Scan"; // Customize the size of the scan page. CGRect rect = [MPScanCodeViewController constructScanAnimationRect]; self.rectOfInterest = rect; // Customize the Select Album button. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Select Album" style:UIBarButtonItemStylePlain target:self action:@selector(selectPhoto)]; } + (CGRect)constructScanAnimationRect { CGSize screenXY = [UIScreen mainScreen].bounds.size; NSInteger focusFrameWH = screenXY.width / 320 * 220;//as wx int offet = 10; if (screenXY.height == 568) offet = 19; return CGRectMake((screenXY.width - focusFrameWH) / 2, (screenXY.height - 64 - focusFrameWH - 83 - 50 - offet) / 2 + 64, focusFrameWH, focusFrameWH); } -(void)buildContainerView:(UIView*)containerView { // Customize the view of the scan box. UIView* bg = [[UIView alloc] initWithFrame:containerView.bounds]; [containerView addSubview:bg]; CGRect rect = [MPScanCodeViewController constructScanAnimationRect]; UIView* view = [[UIView alloc] initWithFrame:rect]; view.backgroundColor = [UIColor orangeColor]; view.alpha = 0.5; [bg addSubview:view]; } - (void)selectPhoto { [self scanPhotoLibrary]; }Process scan results.
-(void)didFind:(NSArray<TBScanResult*>*)resultArray { TBScanResult *result = resultArray.firstObject; NSString* content = result.data; if (result.resultType == TBScanResultTypeQRCode) { content = [NSString stringWithFormat:@"qrcode:%@, hiddenData:%@, TBScanQRCodeResultType:%@", result.data, result.hiddenData, [result.extData objectForKey:TBScanResultTypeQRCode]]; NSLog(@"subType is %@, ScanType_QRCode is %@", @(result.subType), @(ScanType_QRCode)); } else if (result.resultType == TBScanResultTypeVLGen3Code) { content = [NSString stringWithFormat:@"gen3:%@", result.data]; NSLog(@"subType is %@, ScanType_GEN3 is %@", @(result.subType), @(ScanType_GEN3)); } else if (result.resultType == TBScanResultTypeGoodsBarcode) { content = [NSString stringWithFormat:@"barcode:%@", result.data]; NSLog(@"subType is %@, EAN13 is %@", @(result.subType), @(EAN13)); } else if (result.resultType == TBScanResultTypeDataMatrixCode) { content = [NSString stringWithFormat:@"dm:%@", result.data]; NSLog(@"subType is %@, ScanType_DATAMATRIX is %@", @(result.subType), @(ScanType_DATAMATRIX)); } else if (result.resultType == TBScanResultTypeExpressCode) { content = [NSString stringWithFormat:@"express:%@", result.data]; NSLog(@"subType is %@, ScanType_FASTMAIL is %@", @(result.subType), @(ScanType_FASTMAIL)); } dispatch_async(dispatch_get_main_queue(), ^{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:content delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; alert.tag = 9999; [alert show]; }); }Continue to scan the code.
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ // Continue to scan the code. [self resumeScan]; }Set a callback that is triggered when the local album fails to be identified.
- (void)scanPhotoFailed { // The callback that is triggered when the album fails to be identified NSLog(@"scanPhotoFailed"); }Other callback processing
- (void)cameraPermissionDenied { [self.navigationController popViewControllerAnimated:YES]; } - (void)cameraDidStart { NSLog(@"started!!"); } -(void)setTorchState:(TorchState)bState { NSLog(@"TorchState:%lu", (unsigned long)bState); } -(void)userTrack:(NSString*)name { NSLog(@"userTrack:%@", name); } -(void)userTrack:(NSString*)name args:(NSDictionary*)data { NSLog(@"userTrack:%@, args:%@", name, data); } - (void)scanPhotoFailed { // The callback that is triggered when the album fails to be identified NSLog(@"scanPhotoFailed"); }