美文网首页ios进阶酷iOS DeveloperiOS开发技能
竖屏iOS应用中强制部分页面横屏的方法

竖屏iOS应用中强制部分页面横屏的方法

作者: 山是水的故事 | 来源:发表于2016-07-27 22:00 被阅读3314次

需求

今天在使用B站的ijkmedia做视屏播放的功能,视频播放的那个页面我想强制让他横屏。当前的应用本来是一个竖屏应用。查了各种网站方法很多种,但是很多都有各种问题,不符合当前的场景。最终找到了一个解决办法。

处理方法

1 UINavagationController

由于当前的屏幕状态是通过UINavagationController来控制的,所以我们首先需要自定义一个UINavagationController:

@implementation XddBaseNavagationVC

- (BOOL)shouldAutorotate
{
 return [self.viewControllers.lastObject shouldAutorotate];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
 return [self.viewControllers.lastObject supportedInterfaceOrientations];
}

@end

这么做是为了当从横屏页面返回之后,能够让页面保持竖屏(其实是去获取返回之后VC的屏幕状态)。

2 UITabBarViewController

因为当前的应用是一个tabbar应用,所以我们也需要保证tabbar能够正常的显示。我使用了一个分类来处理这个问题,tabbarvc的状态依赖当前选中的VC的属性:

@implementation LCTabBarController (Autorotate)

- (BOOL)shouldAutorotate
{
 return [self.selectedViewController shouldAutorotate];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
 return [self.selectedViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
 return [self.selectedViewController preferredInterfaceOrientationForPresentation];
}

@end

3 BaseVC

然后在我的整个应用中,BaseVC是所有的VC的基类,通过这个我统一的处理了一些问题,因为当前的应用是竖屏的,所以在BaseVC中实现如下几个函数,保证VC竖屏显示:

// 只支持竖屏
- (BOOL)shouldAutorotate {
 return NO;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
 return UIInterfaceOrientationMaskPortrait;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
 return UIInterfaceOrientationPortrait;
}

4 横屏VC的处理

我的横屏的VC也是继承了BaseVC,如果不处理,也会竖屏。通过以下代码进行特殊处理,覆盖BaseVC中的几个方法:

- (BOOL)shouldAutorotate {
 return YES;
}

- (UIInterfaceOrientationMask) supportedInterfaceOrientations {
 return UIInterfaceOrientationMaskLandscapeRight;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
 return UIInterfaceOrientationLandscapeRight;
}

这样就能让他正确的横屏显示,并且返回回去仍然是竖屏。

注意点

当在弹出横屏的VC的时候一定要注意以下几点:

  1. 当前的方式只支持模态弹出。push是会出问题的。
    2.弹出方法,必须要用XddBaseNavagationVC进行包装才可以使用,否则会导致返回之后竖屏的页面变成横屏。
 UINavigationController *nav = [[XddBaseNavagationVC alloc]initWithRootViewController:[[IJKVideoViewController alloc] initWithURL:url]];
 
    [viewController presentViewController:nav animated:YES completion:completion];

相关文章

  • iOS 应用整体竖屏,单个页面横屏

    iOS 应用整体竖屏,单个页面横屏

  • iOS 强制横屏和竖屏

    感谢这位同学的文章 需求:只有一个页面横屏而且是强制横屏,其他页面竖屏而且强制竖屏。 说明:本文方法只适用于pre...

  • 横竖屏切换 (swift)

    一. 需求 APP中需要支持横屏和竖屏,并在不同的页面 可支持的屏幕旋转方向不一致 整体竖屏,部分强制横屏 整体横...

  • 竖屏iOS应用中强制部分页面横屏的方法

    需求 今天在使用B站的ijkmedia做视屏播放的功能,视频播放的那个页面我想强制让他横屏。当前的应用本来是一个竖...

  • Autorotate - 让你的应用支持旋转

    iOS App大多数情况下都是只支持竖屏的,少部分页面才支持旋转,甚至有些页面需要强制横屏。本文将介绍应用如何支持...

  • 编程技巧汇总

    iOS - 强制某个页面横屏,返回竖屏:https://www.jianshu.com/p/45ca13046ee...

  • iOS 强制横屏(Push和模态)

    # iOS 强制横屏(Push和模态) iOS开发过程中,有时候需要页面强制横屏。 下面这种方法是不管手机有没有开...

  • ios 动画竖屏切换到横屏

    在iOS APP中有个别页面需要从竖屏切换到横屏,网上有很多切屏方法,但最后大多是要调用私有API实现,强制改变设...

  • iOS-屏幕旋转截屏相关

    本篇收录各种屏幕旋转知识点等. 1.详解iOS开发中处理屏幕旋转的几种方法2.iOS 个别页面强制横屏,其他页面竖...

  • 横屏竖屏切换

    项目只有竖屏的时侯,在某个页面强制横屏模态的形式推入: 在此页面进行强制转屏 转屏页面 push:推入此类继承UI...

网友评论

  • 33ae886bb778:有个问题就是在横屏的页面为啥
    - (BOOL)shouldAutorotate {
    return YES;
    }
  • 纠结的哈士奇:这个在 Deployment Info - Device Orientation 里要勾选 LandScape Left之类的么
  • 33ae886bb778:你说的最后的那一点。弹出来的vc不用XddBaseNavagationVC封装的话,返回的时候不是必然会横屏,会偶发的横屏。概率倒是不高,100次能有5次。
    弹出来的vc用XddBaseNavagationVC封装的话,目前还没有问题。
    楼主知道这是什么鬼么?!
  • 欢欢1206:你在需要横屏的控制的viewDidLoad试下这个,看看符合你的要求不
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2)];
    bf94b4727683:这么做以后会导致键盘弹出和系统的alert都是竖屏模式。:flushed:
    欢欢1206:这个直接把屏幕旋转了90度,对push、pop、modal都没影响
    山是水的故事:@欢欢1206 好的,我试试,感觉iOS这个横屏不是很好用
  • Charles___:有demo吗?
  • 0d62ead1905e:亲,发个Demo吧,我测测,谢谢
    山是水的故事:@大侠不会飞 我这是卸载项目里面的。。明天我找时间弄一个demo吧
  • RYC:大神,有没有遇到过这种情况,当点击下一个视频播放的时候,会先出现下播放过的上一个视频的画面,然后才播放这一个视频
    山是水的故事:@RYC 这个还没遇到过。。
  • RYC:好,不错,

本文标题:竖屏iOS应用中强制部分页面横屏的方法

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