美文网首页
iOS横竖屏切换

iOS横竖屏切换

作者: 搬砖人666 | 来源:发表于2020-01-17 18:33 被阅读0次

心塞

如此简单的问题百度谷歌搜个遍,互抄的文章太多就算了,还没有能解决问题的,只好自己解决了。

大部分的应用场景:

App默认仅支持竖屏,某些页面支持横屏,这些页面可能在NavigationController上,也可能在tabbarController上再嵌套NavigationController等等,不废话,直接上demo:https://github.com/360fengdai/ScreenRotate

横竖屏切换主要的两个问题

1、web播放器

App固定仅支持竖屏时,web播放视频时也无法切换横屏播放,导致体验非常差。
web播放器播放视频时,会弹出独立的window,页面层次如下:



解决web播放视频的横竖屏自动切换的思路:

- (BOOL)shouldAutorotate { }
- (UIInterfaceOrientationMask)supportedInterfaceOrientations { }

这俩核心方法中,判断是否为webview播放器弹出的页面,返回不同的结果。
代码如下:

类别Class UIViewController+ScreenRotate

- (BOOL)isWebViewPlayVideoInViewController:(UIViewController *)viewConroller {
    NSString *className = NSStringFromClass([viewConroller class]);
    // 适配web播放器
    if ([className isEqualToString:@"AVFullScreenViewController"]) {
        return YES;
    }else if([className isEqualToString:@"UIViewController"]) {
        // 适配web播放器
        if (viewConroller.presentedViewController) {
            UIViewController *controller = viewConroller.presentedViewController;
            if ([NSStringFromClass([controller class]) isEqualToString:@"AVFullScreenViewController"]) {
                return YES;
            }
        }
    }
    return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    if ([self isWebViewPlayVideoInViewController:self]) {
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutorotate{
    if ([self isWebViewPlayVideoInViewController:self]) {
        return YES;
    }
    return NO;
}
2、单个页面的横竖屏支持

解决思路:
把当前页面这两个方法的返回值覆盖到上层的tabbarViewController、navigationController。
贴一个 supportedInterfaceOrientations方法的代码, shouldAutorotate类似,详见上边demo链接。

- (UIInterfaceOrientationMask)orientationMaskWithNavigationController:(UINavigationController *)navigationViewController {
    UIViewController *topViewController = navigationViewController.topViewController;
    return [topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    // 适配web播放器支持屏幕方向
    if ([self isWebViewPlayVideoInViewController:self]) {
        return UIInterfaceOrientationMaskAll;//web播放器支持的屏幕方向
    } else if ([self isKindOfClass:[UINavigationController class]]) {
        // 适配单页面支持屏幕方向
        UINavigationController *navigationController = (UINavigationController *)self;
        return [self orientationMaskWithNavigationController:navigationController];
    }else if ([self isKindOfClass:[UITabBarController class]]) {
        // 适配单页面支持屏幕方向
        UITabBarController *tabbarController = (UITabBarController *)self;
        UIViewController *viewController = [tabbarController selectedViewController];
        if ([viewController isKindOfClass:[UINavigationController class]]) {
            UINavigationController *navigationController = (UINavigationController *)viewController;
            return [self orientationMaskWithNavigationController:navigationController];
        }else if ([viewController isKindOfClass:[UIViewController class]]) {
            return [viewController supportedInterfaceOrientations];
        }
    }
    // 默认仅支持竖屏
    return UIInterfaceOrientationMaskPortrait;
}

如有横竖屏切换的其他问题,可评论或者私信交流。

相关文章

  • [iOS]终极横竖屏切换解决方案

    [iOS]终极横竖屏切换解决方案 [iOS]终极横竖屏切换解决方案

  • JS 与 IOS 交互-横竖屏切换

    IOS 设备横竖屏情况 一般情形 所有界面都支持横竖屏切换如果App的所有切面都要支持横竖屏的切换,那只需要勾选【...

  • iOS 16强制切换横竖屏失效解决

    ios16切换横竖屏代码 注意:1.ios16 开始 UIDeviceOrientationDidChangeNo...

  • 跳转自动横屏

    iOS 知识小集(横竖屏切换) 转载自 http://www.cocoachina.com/ios/2016072...

  • IOS 横竖屏

    //iOS规定不允许强制用代码切换横竖屏 if([[UIDevicecurrentDevice]respondsT...

  • iOS16适配:APP切换横竖屏问题

    iOS16之前切换横竖屏使用的是UIDevice的setValue:forKey:方法进行切换。但在iOS16后不...

  • iOS 横竖屏切换

    AppDelegate.h @property(nonatomic,assign)BOOL isAllowRota...

  • iOS 横竖屏切换

    1、打开横竖屏开关 2、因为屏幕翻转后width和height是相反的 github地址:https://gith...

  • iOS 横竖屏切换

    iOS 中横竖屏切换的功能,在开发iOS app中总能遇到。以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰...

  • iOS 横竖屏切换

    本文只针对单个界面横竖屏界面 1.首先在TARGETS中将横竖屏勾选上(不用勾选貌似也可以,只不过需要在AppDe...

网友评论

      本文标题:iOS横竖屏切换

      本文链接:https://www.haomeiwen.com/subject/fechzctx.html