某一个页面需要横屏,其他的页面任然保持竖屏需要以下关键的几个步骤:

1.修改系统代理方法的返回值

 -(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
//需要横屏的页面将此属性allowRotation修改为YES,竖屏的页面修改为NO
if (_allowRotation == YES) {
//页面仅支持横屏
return UIInterfaceOrientationMaskLandscapeRight;
}else{
//页面仅支持竖屏
return UIInterfaceOrientationMaskPortrait; }
}

2.在需要横屏的界面修改方法-(BOOL)shouldAutorotate的返回值为YES

- (BOOL)shouldAutorotate {

#if 1

    // 设置orientation来横屏竖屏(方式一)
return YES; #else // 旋转式横屏竖屏(方式二)
return NO; #endif }

3.代码实现将屏幕横过来

#pragma mark 横竖屏切换方法
- (void)interfaceOrientation:(UIInterfaceOrientation)orientation
{
/// 注释掉是因为包含私有API,不敢调用啊
// 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 = orientation;
// // 从2开始是因为0 1 两个参数已经被selector和target占用
// [invocation setArgument:&val atIndex:2];
// [invocation invoke];
// } #if 1 // 设置orientation来横屏竖屏(方式一)
NSNumber *resetOrientationTarget = [NSNumber numberWithInt:UIInterfaceOrientationUnknown]; [[UIDevice currentDevice] setValue:resetOrientationTarget forKey:@"orientation"]; NSNumber *orientationTarget = [NSNumber numberWithInt:orientation]; [[UIDevice currentDevice] setValue:orientationTarget forKey:@"orientation"];
//刷新
[UIViewController attemptRotationToDeviceOrientation]; #else // 旋转式横屏竖屏(方式二)
if (orientation == UIInterfaceOrientationLandscapeRight) {
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
self.view.transform = CGAffineTransformMakeRotation(M_PI/);
self.view.frame = CGRectMake(, , MainScreenHeight, MainScreenWidth);
self.titleImage.frame = CGRectMake(, , MainScreenHeight, MainScreenWidth);
} if (orientation == UIInterfaceOrientationPortrait) {
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
self.view.transform = CGAffineTransformMakeRotation();
self.view.frame = CGRectMake(, , MainScreenWidth, MainScreenHeight);
self.titleImage.frame = CGRectMake(, , MainScreenWidth, MainScreenHeight);
} #endif
}

4.UIViewController系统代理方法来检测屏幕旋转

#pragma mark 横竖屏切换或者进来横屏会触发的方法
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
//转屏前调入 -- 此处调用在viewDidLoad之前(重写init方法除外),可在此处做一些控件布局的横竖屏转换
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
//转屏后调入 -- 此处调用在viewDidLoad之后,可在此处做一些控件布局的横竖屏转换
}];
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

经过上述4个步骤可完美实现转屏

by:初光夫

ios开发某个页面横不过来屏幕的时候的更多相关文章

  1. iOS开发学习-放大长图与屏幕等宽

    /* 需要得到一个图片的放大比例,这个比例就是屏幕的宽度与图片真实宽度的比值 */ CGFloat newZoomScale = LZ_SCREEN_WIDTH / [_photoImageView. ...

  2. iOS开发 个别页面是否支持页面旋转

    - (BOOL)shouldAutorotate { return YES; }

  3. iOS开发解决页面滑动返回跟scrollView左右划冲突

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithG ...

  4. iOS开发-委托(Delegate)浅谈

    委托其实并不是OC中才有,C#中也有,不过彼此的理解方式是不一样的,OC中委托是协议的一种,需要使用@protocol声明,委托一般在iOS开发中页面中传值用的比较多.委托是Cocoa中最简单.最灵活 ...

  5. IOS开发之绝对布局和相对布局(屏幕适配)

    之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下 ...

  6. iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换

    iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换 不多说直接上效果图和代码 1.设置RootViewController为一个导航试图控制器 //  Copyright © 2016年 ...

  7. 谈谈iOS开发如何写个人中心这类页面--静态tableView页面的编写

    本文来自 网易云社区 . 一.本文讲的是什么问题? 在开发 iOS 应用时,基本都会遇到个人中心.设置.详情信息等页面,这里截取了某应用的详情编辑页面和个人中心页面,如下: 我们以页面结构的角度考虑这 ...

  8. iOS开发点滴:iPhone屏幕适配

    最近开始做iOS开发,遇到一些小问题和解决方法,记录下.   今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...

  9. iOS开发之各种动画各种页面切面效果

    因工作原因,有段时间没发表博客了,今天就发表篇博客给大家带来一些干货,切勿错过哦.今天所介绍的主题是关于动画的,在之前的博客中也有用到动画的地方,今天就好好的总结一下iOS开发中常用的动画.说道动画其 ...

随机推荐

  1. Farm Tour POJ - 2135 (最小费用流)

    When FJ's friends visit him on the farm, he likes to show them around. His farm comprises N (1 <= ...

  2. 关于IDEA 单元测试时 【empty test suite】异常的分析!!

    IDEA功能很强大,配置很操蛋,自从用了之后掉了很多坑!!! 这几天要用单元测试,方法完好但是就是一直报empty test suite ,WTF,类找不到 在网上反复的找答案都没有合适 静下心想想, ...

  3. Compoer介绍

    Compoer介绍 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 安装Composer Composer.phar 是 Compos ...

  4. hadoop伪分布式集群的搭建

    集群配置: jdk1.8.0_161 hadoop-2.6.1 linux系统环境:Centos6.5 创建普通用户  dummy 设置静态IP地址 Hadoop伪分布式集群搭建: 为普通用户添加su ...

  5. Windows网络编程笔记6 --- WinSock I/O 控制方法

    Windows提供了两种方式“套接字模式”和“套接字I/O模型”,可对一个套接字上的I/O行为加以控制.套接字模式用于决定在随一个套接字调用时,那些 Winsock函数的行为.其中的模型包括括sele ...

  6. 使用 SceneLoader 类在 XNA 中显示载入屏幕(十)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  7. 并发编程——IO模型(6)

    1.IO模型分类 同步IO #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回.按照这个定义,其实绝大多数函数都是同步调用.但是一般而言,我们在说同步.异步的时候,特指那些需要 ...

  8. Python学习-day12 Mysql

    MYSQ数据库的安装使用 Linux/UNIX上安装Mysql Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: MySQL - MySQL服务器.你需 ...

  9. JS 关于 URL 的编码或解码方法

    URL的合法字符 URL的合法字符表示再浏览器的地址栏中不会被转义的字符,有两种: URL元字符:分号(;),逗号(’,’),斜杠(/),问号(?),冒号(:),at(@),&,等号(=),加 ...

  10. CentOS7安装Code::Blocks

    在CentOS7上安装Codelocks的过程. 1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum instal ...