UIInterfaceOrientation是风景但UIView仍然在肖像模式

问题描述:

我正在开发一个iOS应用程序与最新的SDK。UIInterfaceOrientation是风景但UIView仍然在肖像模式

我正在开发一款仅支持LandscapeRight方向的相机应用程序。

On Main ViewController我为AVCaptureVideoPreviewLayer添加了UIView。换句话说,主要是ViewController我有主视图,另一个视图videoPreviewView,对于AVCaptureVideoPreviewLayer

我对viewWillAppear:方法建立AVCaptureVideoPreviewLayer

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self setUpVideo]; 
} 

- (void)setUpVideo 
{ 
    NSLog(@"Set up video"); 
    if (DataExchanger.cameraManager != nil) 
    { 
     UIView *view = [self videoPreviewView]; 
     CALayer *viewLayer = [view layer]; 
     [viewLayer setMasksToBounds:YES]; 

     AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:DataExchanger.cameraManager.captureSession]; 
     CGRect bounds = [view bounds]; 
     NSLog(@"BOUNDS: %@", NSStringFromCGRect(bounds)); 

     [newCaptureVideoPreviewLayer setFrame:bounds]; 
     [newCaptureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 

     [viewLayer insertSublayer:newCaptureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]]; 
    } 
} 

我得到这个日志:

BOUNDS: {{0, 0}, {320, 480}} 

UIInterfaceOrientationUIInterfaceOrientationLandscapeRight,并与方向,我会得到这些值:

BOUNDS: {{0, 0}, {480, 320}} 

另一个问题是我看到视频旋转-90度

我发现这个stackoverflow question,但从未触发- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation方法。

发生了什么事?我该如何解决这个问题?

  1. AVCaptureVideoPreviewLayer的默认对象方向为横向!
  2. AVCaptureVideoPreviewLayer的方向不随设备的方向而改变。你必须手动改变它。
  3. 要手动更改它,你需要调用预览层的连接,并将其旋转:

iOS6的:

AVCaptureConnection *previewLayerConnection=self.newCaptureVideoPreviewLayer.connection; 
if ([previewLayerConnection isVideoOrientationSupported]) 
    [previewLayerConnection setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; 

< iOS6的:

if ([self.newCaptureVideoPreviewLayer isOrientationSupported]) 
[self.newCaptureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationLandscapeRight]; 
+0

我的工作与最新的SDK,我支持iOS 5.0及以上。我必须使用哪个版本的答案?但我认为你的回答并没有解决我的问题,因为现在我正在使用第二个选项,而且我遇到了这个问题。 – VansFannel 2013-03-18 07:36:35

+0

如果有人打算在发帖后的3个月随机抽取3个我的答案;至少请发表评论和理由(如果有的话)。 – Spectravideo328 2014-05-20 11:24:31