iOS强制横屏

iOS强制横屏的两种方式:

第1种:设置状态栏方向,然后vc.view设置transform旋转。注意:VC需要设置为不支持横屏。

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
    [UIView animateWithDuration:0.25
                     animations:^{
                         self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
                         self.view.bounds = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width);

                     }
                     completion:^(BOOL finished) {

                     }];

然后重写VC屏幕旋转方法为只支持竖向:

#pragma mark //屏幕旋转
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

- (BOOL)shouldAutorotate {
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;//只支持这一个方向(正常的方向)
}

第2种:强制横屏的VC需支持屏幕旋转,但只支持横向,其他vc都需要设置自己对屏幕方向的支持。

强制横屏VC最好使用自动布局,或者重写viewWillLayoutSubviews和viewDidLayoutSubviews,实现进行页面布局。

需要强制横屏的VC的屏幕方向支持代码:

#pragma mark  屏幕旋转
//iOS5
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft||toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
//iOS6+
- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

其他不需要支持横屏的VC的代码(建议放在BaseVC):

#pragma mark //屏幕旋转
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

- (BOOL)shouldAutorotate {
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;//只支持这一个方向(正常的方向)
}

然后也是最关键的地方如果使用navgationController请使用其子类,并在子类种重写屏幕旋转方法:

#pragma mark //屏幕旋转
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    if ([self.topViewController respondsToSelector:@selector(shouldAutorotateToInterfaceOrientation:)]) {
        return  [self.topViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
    }
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

- (BOOL)shouldAutorotate {
    if ([self.topViewController respondsToSelector:@selector(shouldAutorotate)]) {
        return  [self.topViewController shouldAutorotate];
    }
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
    if ([self.topViewController respondsToSelector:@selector(supportedInterfaceOrientations)]) {
        return  [self.topViewController supportedInterfaceOrientations];
    }
    return UIInterfaceOrientationMaskPortrait;//只支持这一个方向(正常的方向)
}

================================

做视频播放时需强制横屏,开始使用第一种方式实现,后因AirPlay选择框显示依然是竖屏方向,改用了第二种方式,建议使用第二种方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-27 22:48:50

iOS强制横屏的相关文章

iOS 强制横屏

// // AAAAViewController.m // hengp // // Created by 朱信磊 on 15/2/13. // Copyright (c) 2015年 niit. All rights reserved. // #import "AAAAViewController.h" #import "AppDelegate.h" @interface AAAAViewController () @end @implementation AAAA

iOS 9 强制横屏

首先在plist 文件中 Supported interface orientations 选项 只留下一个 portrait 屏幕强制横屏 使用以下代码 self.navigationController.view.transform = CGAffineTransformMakeRotation(M_PI/2); self.navigationController.view.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); [[UI

ios 相机界面强制横屏

IOS调用系统的相机默认是竖屏的,网上找了很多方法强制横屏都无效,以下代码经测试兼容ios78 自定义一个UIImagePickerController并且覆盖以下方法: -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeLeft; } - (NSUInteger)supportedInterfaceOrientations{

H5页面 强制横屏显示 适配IOS和安卓

H5页面 强制横屏显示 适配IOS和安卓 <script> var evt = "onorientationchange" in window ? "orientationchange" : "resize"; $(window).resize(function(){ resize(); }); window.addEventListener(evt, resize(), false); function resize(){ var

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

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

Activity的强制横屏与强制竖屏

开发中经遇到某个Ativity需要强制横屏,例如:一个Ativity负责播放视频,竖屏看起来极丑,那干脆打开该Activity的时候就让它横屏显示. 这需要在清单文件中找到该Activity,然后加入一行代码,来指定它的显示方式: android:screenOrientation="landscape" (强制横屏) android:screenOrientation="portrait"(强制竖屏) 代码位置如图:

iOS设备横屏时,frame和bounds的分别

工程中有两个ViewControllers,其中ViewController是root view controller,底色是红色,上面有一个按钮,点击后加载GreenViewController,并显示其视图,底色是绿色. 首先是ViewController的代码: #import "ViewController.h" #import "GreenViewController.h" @interface ViewController () @end @implem

待解决需求-移动端打开网页强制横屏

待解决需求-移动端打开网页强制横屏[在手机未开启自动横屏的设置时] 或者说: 比如随时可以查看类似Excel.table样子的报表.手机端打开为了宽度看的内容多点(允许底部出现滚动条),所以做好能够横屏过来,然后内容自适应宽度. 或者说: 手机端强制网页横屏,但是里面的内容不要横屏,宽度能自适应. 网上查了下:有用css的  -webkit-transform: rotate(-90deg); 实现.但是它把整个div横屏后,里面的内容也横屏了. 待解决.....................

UC,qq浏览器强制横屏

<!-- 启用360浏览器的极速模式(webkit) --> <meta name="renderer" content="webkit"> <!-- 避免IE使用兼容模式 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content=&qu