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

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. 问题 1936: [蓝桥杯][算法提高VIP]最大乘积

    问题 1936: [蓝桥杯][算法提高VIP]最大乘积 时间限制: 1Sec 内存限制: 128MB 提交: 77 解决: 16 题目描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? ...

  2. callback回调函数【转】

    请给作者点赞--> 原文链接 什么是回调函数? 我们绕点远路来回答这个问题. 编程分为两类:系统编程(system programming)和应用编程(application programmi ...

  3. Mysql相关子查询&&MySQL获取分组后的TOP N记录

    小燕子,哈哈哈哈~~~~~~~~~~ 相关子查询是指引用了外部查询列的子查询,即子查询会对外部查询的每行进行一次计算. 举个例子 root:test> show create table tes ...

  4. Spring Boot 开发系列一 开发踩坑

    这是学习spring boot 的第二周,公司号称这玩意是啥都不会的新手就可以填空开发,于是决定上手一把,怎么说我也是搞了快七八年的.NET和.NETcore,没想到无情打脸,快被这个能填空开的IDE ...

  5. Dcgpofix

    TechNet Library Windows Server Windows Server 2012 R2 and Windows Server 2012 Management and Tools C ...

  6. jenkins忘记管理员登陆密码

    配置文件的路径在.../jenkins/config.xml (线上路径是/usr/local/tomcat7/webapps/jenkins/config.xml) 修复办法:千万注意:修复前一定要 ...

  7. Spring AOP Example 文件下载:

      文件下载:http://files.cnblogs.com/wucg/spring_aop_excise.zip P:124 spring核心技术 P225: spring doc 可以把Advi ...

  8. CTSC2018 旅游记

    我即使是死了,尸体烂在棺材里,也要用这腐朽的声音喊出: LJCCF!!!! DAY -3 体育中考AK了! 顿时感觉中考稳了(虽然竞赛已经特招) 新目标:我要用三种方式考上SZMS! DAY -1 成 ...

  9. [SDOI2010][bzoj1927] 星际竞速 [最小路径覆盖+费用流]

    题面 传送门 思路 仔细观察题目要求的东西,发现就是求一个最小路径覆盖,只不过可以跳跃(就是那个鬼畜的超级跳跃) 那么就直接上最小路径覆盖模版 对每个点,拆成两个点$X_i$和$Y_i$,建立超级源超 ...

  10. 求和为s的连续正数序列

    输入一个正数是s,打印出所有和为s的连续正数序列(至少含有两个数).例如输入15,由于1+2+3+4+5=4+5+6==7+8=15,所有结果打印出3个序列1-5,4-6,7-8. 代码如下: voi ...