diff --git a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..6b30c74
--- /dev/null
+++ b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,10 @@
+
+
+
+
+ BuildSystemType
+ Original
+ PreviewsEnabled
+
+
+
diff --git a/ios/Classes/BarcodeScannerViewController.m b/ios/Classes/BarcodeScannerViewController.m
index da44ca0..662c381 100644
--- a/ios/Classes/BarcodeScannerViewController.m
+++ b/ios/Classes/BarcodeScannerViewController.m
@@ -10,6 +10,35 @@
@implementation BarcodeScannerViewController {
}
+- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator
+{
+ CGRect bounds = [UIScreen mainScreen].bounds;
+ CGRect reversedBounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.height, bounds.size.width);
+ self.previewView.bounds = reversedBounds;
+ self.previewView.frame = reversedBounds;
+ [self.scanRect stopAnimating];
+ [self.scanRect removeFromSuperview];
+ [self setupScanRect:reversedBounds];
+ [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
+}
+
+- (void)setupScanRect:(CGRect)bounds {
+ self.scanRect = [[ScannerOverlay alloc] initWithFrame:bounds];
+ self.scanRect.translatesAutoresizingMaskIntoConstraints = NO;
+ self.scanRect.backgroundColor = UIColor.clearColor;
+ [self.view addSubview:_scanRect];
+ [self.view addConstraints:[NSLayoutConstraint
+ constraintsWithVisualFormat:@"V:[scanRect]"
+ options:NSLayoutFormatAlignAllBottom
+ metrics:nil
+ views:@{@"scanRect": _scanRect}]];
+ [self.view addConstraints:[NSLayoutConstraint
+ constraintsWithVisualFormat:@"H:[scanRect]"
+ options:NSLayoutFormatAlignAllBottom
+ metrics:nil
+ views:@{@"scanRect": _scanRect}]];
+ [_scanRect startAnimating];
+}
- (void)viewDidLoad {
[super viewDidLoad];
@@ -26,21 +55,7 @@
options:NSLayoutFormatAlignAllBottom
metrics:nil
views:@{@"previewView": _previewView}]];
- self.scanRect = [[ScannerOverlay alloc] initWithFrame:self.view.bounds];
- self.scanRect.translatesAutoresizingMaskIntoConstraints = NO;
- self.scanRect.backgroundColor = UIColor.clearColor;
- [self.view addSubview:_scanRect];
- [self.view addConstraints:[NSLayoutConstraint
- constraintsWithVisualFormat:@"V:[scanRect]"
- options:NSLayoutFormatAlignAllBottom
- metrics:nil
- views:@{@"scanRect": _scanRect}]];
- [self.view addConstraints:[NSLayoutConstraint
- constraintsWithVisualFormat:@"H:[scanRect]"
- options:NSLayoutFormatAlignAllBottom
- metrics:nil
- views:@{@"scanRect": _scanRect}]];
- [_scanRect startAnimating];
+ [self setupScanRect:self.view.bounds];
self.scanner = [[MTBBarcodeScanner alloc] initWithPreviewView:_previewView];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];
[self updateFlashButton];
diff --git a/ios/Classes/ScannerOverlay.m b/ios/Classes/ScannerOverlay.m
index ab4c121..7c415b9 100644
--- a/ios/Classes/ScannerOverlay.m
+++ b/ios/Classes/ScannerOverlay.m
@@ -83,19 +83,31 @@
}
- (CGRect)scanRect {
- CGRect rect = self.frame;
- CGFloat heightMultiplier = 3.0/4.0; // 4:3 aspect ratio
- CGFloat scanRectWidth = rect.size.width * 0.8f;
- CGFloat scanRectHeight = scanRectWidth * heightMultiplier;
- CGFloat scanRectOriginX = (rect.size.width / 2) - (scanRectWidth / 2);
- CGFloat scanRectOriginY = (rect.size.height / 2) - (scanRectHeight / 2);
- return CGRectMake(scanRectOriginX, scanRectOriginY, scanRectWidth, scanRectHeight);
+ CGRect rect = self.frame;
+
+ CGFloat frameWidth = rect.size.width;
+ CGFloat frameHeight = rect.size.height;
+
+ BOOL isLandscape = frameWidth > frameHeight;
+ CGFloat widthOnPortrait = isLandscape ? frameHeight : frameWidth;
+ CGFloat scanRectWidth = widthOnPortrait * 0.8f;
+ CGFloat aspectRatio = 3.0/4.0;
+ CGFloat scanRectHeight = scanRectWidth * aspectRatio;
+
+ if(isLandscape) {
+ CGFloat navbarHeight = 32;
+ frameHeight += navbarHeight;
+ }
+
+ CGFloat scanRectOriginX = (frameWidth - scanRectWidth) / 2;
+ CGFloat scanRectOriginY = (frameHeight - scanRectHeight) / 2;
+ return CGRectMake(scanRectOriginX, scanRectOriginY, scanRectWidth, scanRectHeight);
}
- (CGRect)scanLineRect {
CGRect scanRect = [self scanRect];
- CGRect rect = self.frame;
- return CGRectMake(scanRect.origin.x, rect.size.height / 2, scanRect.size.width, 1);
+ CGFloat positionY = scanRect.origin.y + (scanRect.size.height / 2);
+ return CGRectMake(scanRect.origin.x, positionY, scanRect.size.width, 1);
}
@end