mirror of
https://github.com/simplezhli/flutter_barcode_reader.git
synced 2024-12-23 14:29:24 +08:00
Add missing files
This commit is contained in:
parent
80b5c6f3eb
commit
a4880d7213
16
ios/Classes/BarcodeScannerViewController.h
Normal file
16
ios/Classes/BarcodeScannerViewController.h
Normal file
@ -0,0 +1,16 @@
|
||||
//
|
||||
// Created by Matthew Smith on 11/7/17.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MTBBarcodeScanner/MTBBarcodeScanner.h>
|
||||
|
||||
#import "BarcodeScannerViewControllerDelegate.h"
|
||||
|
||||
|
||||
@interface BarcodeScannerViewController : UIViewController
|
||||
@property(nonatomic, retain) UIView *previewView;
|
||||
@property(nonatomic, retain) MTBBarcodeScanner *scanner;
|
||||
@property(nonatomic, weak) id<BarcodeScannerViewControllerDelegate> delegate;
|
||||
|
||||
@end
|
135
ios/Classes/BarcodeScannerViewController.m
Normal file
135
ios/Classes/BarcodeScannerViewController.m
Normal file
@ -0,0 +1,135 @@
|
||||
//
|
||||
// Created by Matthew Smith on 11/7/17.
|
||||
//
|
||||
|
||||
#import "BarcodeScannerViewController.h"
|
||||
#import <MTBBarcodeScanner/MTBBarcodeScanner.h>
|
||||
|
||||
|
||||
@implementation BarcodeScannerViewController {
|
||||
}
|
||||
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.previewView = [[UIView alloc] initWithFrame:self.view.bounds];
|
||||
self.previewView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[self.view addSubview:_previewView];
|
||||
[self.view addConstraints:[NSLayoutConstraint
|
||||
constraintsWithVisualFormat:@"V:[previewView]"
|
||||
options:NSLayoutFormatAlignAllBottom
|
||||
metrics:nil
|
||||
views:@{@"previewView": _previewView}]];
|
||||
[self.view addConstraints:[NSLayoutConstraint
|
||||
constraintsWithVisualFormat:@"H:[previewView]"
|
||||
options:NSLayoutFormatAlignAllBottom
|
||||
metrics:nil
|
||||
views:@{@"previewView": _previewView}]];
|
||||
self.scanner = [[MTBBarcodeScanner alloc] initWithPreviewView:_previewView];
|
||||
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated {
|
||||
[super viewDidAppear:animated];
|
||||
if (self.scanner.isScanning) {
|
||||
[self.scanner stopScanning];
|
||||
}
|
||||
[MTBBarcodeScanner requestCameraPermissionWithSuccess:^(BOOL success) {
|
||||
if (success) {
|
||||
[self startScan];
|
||||
} else {
|
||||
[self showNoCameraAccessAlert];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
[super viewWillDisappear:animated];
|
||||
if ([self isFlashOn]) {
|
||||
[self toggleFlash:NO];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)startScan {
|
||||
NSError *error;
|
||||
[self.scanner startScanningWithResultBlock:^(NSArray<AVMetadataMachineReadableCodeObject *> *codes) {
|
||||
[self.scanner stopScanning];
|
||||
AVMetadataMachineReadableCodeObject *code = codes.firstObject;
|
||||
if (code) {
|
||||
[self.delegate barcodeScannerViewController:self didScanBarcodeWithResult:code.stringValue];
|
||||
[self dismissViewControllerAnimated:NO completion:nil];
|
||||
}
|
||||
} error:&error];
|
||||
}
|
||||
|
||||
- (void)cancel {
|
||||
[self dismissViewControllerAnimated:true completion:nil];
|
||||
}
|
||||
|
||||
- (void)updateFlashButton {
|
||||
if (!self.hasTorch) {
|
||||
return;
|
||||
}
|
||||
if (self.isFlashOn) {
|
||||
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Flash Off"
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:self action:@selector(toggle)];
|
||||
} else {
|
||||
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Flash On"
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:self action:@selector(toggle)];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)showNoCameraAccessAlert {
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Camera access denied"
|
||||
message:@"Camera access has been disabled for this application. To turn camera access back on, please go to the iOS settings application."
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
||||
[self dismissViewControllerAnimated:YES completion:nil];
|
||||
}]];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)toggle {
|
||||
[self toggleFlash:!self.isFlashOn];
|
||||
[self updateFlashButton];
|
||||
}
|
||||
|
||||
- (BOOL)isFlashOn {
|
||||
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
if (device) {
|
||||
return device.torchMode == AVCaptureFlashModeOn || AVCaptureTorchModeOn;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)hasTorch {
|
||||
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
if (device) {
|
||||
return device.hasTorch;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
- (void)toggleFlash:(BOOL)on {
|
||||
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
if (!device) return;
|
||||
|
||||
NSError *err;
|
||||
if (device.hasFlash && device.hasTorch) {
|
||||
[device lockForConfiguration:&err];
|
||||
if (err != nil) return;
|
||||
if (on) {
|
||||
device.flashMode = AVCaptureFlashModeOn;
|
||||
device.torchMode = AVCaptureTorchModeOn;
|
||||
} else {
|
||||
device.flashMode = AVCaptureFlashModeOff;
|
||||
device.torchMode = AVCaptureTorchModeOff;
|
||||
}
|
||||
[device unlockForConfiguration];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@end
|
13
ios/Classes/BarcodeScannerViewControllerDelegate.h
Normal file
13
ios/Classes/BarcodeScannerViewControllerDelegate.h
Normal file
@ -0,0 +1,13 @@
|
||||
//
|
||||
// Created by Matthew Smith on 11/7/17.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@class BarcodeScannerViewController;
|
||||
|
||||
@protocol BarcodeScannerViewControllerDelegate <NSObject>
|
||||
|
||||
- (void)barcodeScannerViewController:(BarcodeScannerViewController *)controller didScanBarcodeWithResult:(NSString *)result;
|
||||
|
||||
@end
|
Loading…
Reference in New Issue
Block a user