在ipad上,用戶是橫屏操作的籍胯,雖然界面旋轉(zhuǎn)了,是橫屏的离福,但是攝像頭里顯示的依然是豎屏效果杖狼,也就是說從攝像頭里看到的和人眼看到的內(nèi)容相差90度或者270度,網(wǎng)上搜索了一番术徊,是這個AVCaptureVideoPreviewLayer 的問題本刽,設(shè)備旋轉(zhuǎn)了,但是它沒有旋轉(zhuǎn)赠涮,導(dǎo)致屏幕顯示的子寓,和人眼看到的有偏差,找到如下解決辦法笋除,希望對大家有幫助
AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:_captureSession];
layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
layer.frame= view.frame;
[view.layer insertSublayer:layer atIndex:0];
CGRectlayerRect = view.layer.bounds;//獲取當前設(shè)備的旋轉(zhuǎn)角度
UIDeviceOrientation deorientation =[[UIDevice currentDevice] orientation];
switch(deorientation) {
case UIDeviceOrientationLandscapeLeft:
layer.affineTransform = CGAffineTransformMakeRotation(M_PI+ M_PI_2);// 270 degrees
//旋轉(zhuǎn)270度和90度的效果是一樣的斜友,設(shè)備旋轉(zhuǎn)之后,屏幕寬和高對換了垃它,那么攝像頭的layer的寬高也應(yīng)該對換
[layer setBounds:CGRectMake(0,0, layerRect.size.height, layerRect.size.width)];
break;
case UIDeviceOrientationLandscapeRight:
layer.affineTransform = CGAffineTransformMakeRotation(M_PI_2);
// 90 degrees
[layer setBounds:CGRectMake(0,0, layerRect.size.height, layerRect.size.width)];
break;
case UIDeviceOrientationPortraitUpsideDown:
layer.affineTransform = CGAffineTransformMakeRotation(M_PI);
// 180 degrees
//設(shè)備正著和倒著都是豎屏鲜屏,寬高沒變化,那么攝像頭的layer的寬高也還是屏幕的寬高
[layer setBounds:layerRect];
break;
default:
{
layer.affineTransform = CGAffineTransformMakeRotation(0.0);
[layer setBounds:layerRect];
}
break;
}
[layer setPosition:CGPointMake(CGRectGetMidX(layerRect),CGRectGetMidY(layerRect))];