修复横向模式下的旋转问题

Posted

技术标签:

【中文标题】修复横向模式下的旋转问题【英文标题】:Fix rotation issue in landscape mode 【发布时间】:2016-03-31 08:31:51 【问题描述】:

我有一个使用 AVCapturesession 捕获图像的应用程序,我有一个视图控制器,里面有一个 UIView,我在这个视图中运行会话。

当我的应用程序以纵向模式加载时,一切都很好,它会打开全屏并在旋转到横向模式时也保持全屏,因为我的视图用于捕获图像,所以我不允许仅旋转 UIView捕捉图像一切正常。

唯一的问题是,当我的应用以横向模式打开时,它不是全屏的,一旦我将其旋转到纵向,它就会变成全屏,然后回到横向时它仍然是全屏。

我该如何解决这个问题,或者有没有办法强制您的 ios 应用始终以纵向模式打开,然后让它旋转?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。你应该在你的应用委托类中实现这个方法。这是示例。希望这是您所需要的。

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window

    if([window.rootViewController isKindOfClass:[HRMHomeViewController class]])
    
        id homeViewController = (HRMHomeViewController*)window.rootViewController;
        if ([[homeViewController presentedViewController]
             isKindOfClass:[HRMCapturedScreenViewController class]])
            return UIInterfaceOrientationMaskPortrait;
    
    return UIInterfaceOrientationMaskAll;

使用此方法,您的相机层的框架将根据方向旋转

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                         duration:(NSTimeInterval)duration

    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation
                                            duration:duration];
    self.captureManager.cameraLayer.frame = self.videoView.bounds;

UINavigationController 中有一些方法可以提供帮助。这里有两种方法,或者创建 UINavigationController 的类别或继承它。

- (UIInterfaceOrientationMask)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController 
- (UIInterfaceOrientation)navigationControllerPreferredInterfaceOrientationForPresentation:(UINavigationController *)navigationController 

【讨论】:

以上是关于修复横向模式下的旋转问题的主要内容,如果未能解决你的问题,请参考以下文章

横向模式下的预览方向使用 Camera2 api 顺时针旋转

Android横向模式下的渲染问题

不正确的骨骼旋转,基于编辑模式下的骨骼结构

如何从纵向模式自动旋转到横向模式?

如何禁用旋转到横向模式? [复制]

如何将视图从纵向模式旋转到横向模式