之前自己写了一个扫描二维码Demo,本来在iPhone上跑,最近用iPad也跑一下,发现了一点问题,毕竟自己没开发过iPad App,经过一凡折腾,发现了原来摄像头的方向和屏幕的方向是分开的。
iPad上的方向配置
一般情况下,我们会在项目配置里勾选支持的方向,但是如果选择了Universal
,就要留意一下info.plist
文件里的配置,iPhone
和 iPad
是分开配置的
摄像头方向
由于自己不熟悉iPad配置,而且我的iPad锁定了横屏,导致我的扫描二维码Demo里摄像头方向不对,才发现,原来屏幕方向和摄像头方向其实是分开的
/* 一般扫描二维码的代码 (iOS7之后的)*/
// 创建AVCaptureSession
AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
self.session = captureSession;
// 配置输入设备
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *inputDevice = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:nil];
[captureSession addInput:inputDevice];
// 配置输出模式
AVCaptureMetadataOutput *captureOutput = [[AVCaptureMetadataOutput alloc] init];
[captureOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[captureSession addOutput:captureOutput];
[captureOutput setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
// 添加显示内容的layer
self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.previewLayer.frame = self.view.bounds;
[self.view.layer addSublayer:self.previewLayer];
弄好扫描代码后,就可以设置摄像头方向了
AVCaptureConnection *previewLayerConnection = self.previewLayer.connection;
UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
if ([previewLayerConnection isVideoOrientationSupported]) {
switch (interfaceOrientation) {
case UIInterfaceOrientationPortrait:
[previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];
//for portrait
break;
case UIInterfaceOrientationLandscapeRight:
[previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight];
//home button on right.
break;
case UIInterfaceOrientationLandscapeLeft:
[previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft];
//home button on left.
break;
default:
[previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationPortrait];
//for portrait upside down.
break;
}
}
经过一番配置,摄像头的方向终于和屏幕方向一致了。