iOS 实现单个页面支持横竖屏,其他页面只能竖屏

 最近在自己的项目里面  有需要做一个需求 : app中某一个页面支持横竖屏, 而其他页面只能竖屏。
  • 1
  • 2

实现方法如下: 
1 首先需要Xcode中选中支持的屏幕方向 

2 Appdelegate中 
.h

@property (nonatomic,assign)NSInteger allowRotate; 
  • 1

.m中

//此方法会在设备横竖屏变化的时候调用
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{

 //   NSLog(@"方向  =============   %ld", _allowRotate);
    if (_allowRotate == 1) {
        return UIInterfaceOrientationMaskAll;
    }else{
        return (UIInterfaceOrientationMaskPortrait);
    }
}

// 返回是否支持设备自动旋转
- (BOOL)shouldAutorotate
{
    if (_allowRotate == 1) {
        return YES;
    }
    return NO;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3 在需要支持横竖屏的controller中:

viewWillApplear 中

 //在视图出现的时候,将allowRotate改为1,
    AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    delegate.allowRotate = 1;
  • 1
  • 2
  • 3

viewWillDisappear中

 //在视图出现的时候,将allowRotate改为0,
    AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    delegate.allowRotate = 0;
  • 1
  • 2
  • 3

写好以上代码之后, 会发现一些问题: 当横屏页面直接点击“返回”按钮退出的时候, 页面依然是横屏, 而我们需要的是仅一个页面可以横屏,测试需要在viewWillDisappear中加入如下代码:

    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
        SEL selector = NSSelectorFromString(@"setOrientation:");
        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
        [invocation setSelector:selector];
        [invocation setTarget:[UIDevice currentDevice]];
        int val = UIInterfaceOrientationPortrait;
        [invocation setArgument:&val atIndex:2];
        [invocation invoke];
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

此时就可以使app仅有设置页面支持横竖屏了!

此时如果app要求用户在横屏 竖屏的模式下改变UI(横屏与竖屏对应不同的UI), 可以在以下方法中执行

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    // do something before rotation
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
         屏幕从竖屏变为横屏时执行

    }else{
        屏幕从横屏变为竖屏时执行
    }
  }

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    // do something after rotation

}

原文地址:https://www.cnblogs.com/sunfuyou/p/8533656.html

时间: 2024-10-08 16:05:18

iOS 实现单个页面支持横竖屏,其他页面只能竖屏的相关文章

使所有页面都屏幕不能旋转(始终竖屏)

是不是很想有一种方法,使写一次代码,就可以使所有的页面屏幕都在不旋转(即在屏幕转的时候,字幕并不会改变) 首先上下结构图: 上代码: #import "AppDelegate.h" #import "RootViewController.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic

Android:设置APP全屏、横屏、竖屏、常亮的方法

全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏 横屏(两种) 1.修改Activity的onR

手机横屏竖屏css

@media是css3中新定义的,功能非常强大,顾名思义PC是无法匹配横竖屏的,所以orientation只对移动设备起效. 1.头部声明 复制代码 代码如下: <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,maximum-scale=1.0"> 加到 复制代码 代码如下: <head></head> 2.

IOS竖屏应用单个页面横屏的解决办法

昨天朋友问我,怎么实现在竖屏的应用里,显示一个横屏的应用,由于也没做过 就说不知道了,但是我觉得会有这样的API ,因为我手机里就安装有这种类型的软件 今天早上起来,就想做一个Dome出来,惯例的是查找资料,测试是否可以使用,但是 查找了都写的不是很清楚,很容易造成没法实现想要的效果,所以想重新写过一个 希望能帮到有这个需求的朋友.(这个没什么经验,的是照着网上的资料拼凑起来, 如果有错误,请见谅,有更好的办法也可以告诉我) 实现的效果: 页面大部分是竖屏,个别页面可以旋转手机时页面变为横屏(其

iOS开发——在不支持横屏情况下,实现播放器全屏播放

在使用MPMoviePlayerController实现播放器播放时,发现不能全屏播放,原来是因为项目不支持横屏,把支持横屏的选项勾住就OK啦,但是其他页面不支持横屏,这个方法就行不通了. 在网上找了很多的资料,很多都是在iOS 6之后就舍弃的,都没用,下面我就来介绍下,在不支持横屏的情况下,实现视频播放器的全屏播放. 1. 首先在AppDelegate.h 定义@property (nonatomic, assign) BOOL allowRotation; // 标记是否可以旋转 2. 同时

IOS写一个可以支持全屏的WebView

这样来写布局 一个TitleView作为顶部搜索栏: @implementation TitleView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code [self initTilte]; } return self; } -(void)initTilte{ UITextField* field = [[UITextField al

iOS 工程默认只允许竖屏,在单独界面进行横竖转换,屏幕旋转

只含有 .关于横竖屏的代码 #import "InspectionReportViewController.h" #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) @interface InspectionReportViewController ()<UIWebViewDel

项目仅支持竖屏,特定页面支持横屏

项目概述: 1.项目有UITabBarController管理多个UINavigationController,每个UINaviagitionController分管多个UIViewController; 2.项目由多人开发,为不相互干扰使用多个UIStoryboard: 项目需求: 1.工程中只有播放视频页面允许用户横屏播放,但并非打开页面就是横屏: 2.播放页面需要展示title,选择用push方式跳转,不能用模态方式弹出页面: 3.播放页面横屏展示时,导航栏自动隐藏,单击屏幕可恢复导航栏,

iOS 个别页面强制横屏,其他页面竖屏

在开发项目的时候,遇到了一个问题,就是其中一个页面需要强制横屏,而其他页面要强制竖屏. 我的解决方法是这样的.在AppDelegate.h里面添加@property(nonatomic,assign)NSInteger allowRotation;在AppDelegate.m文件里面添加 1 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindo