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

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. C++多态实例

    #include <iostream> #include <string> using namespace std; //class 实现 class Employee { s ...

  2. (WPF&Silverlight)silverlight自定义控件

    2个半小时弄懂了自定义控件是怎么回事儿. 在silverlight中创建一个UserControl,把上面sliderbar的外观和功能都封装在里面. 以自定义控件mapslider控件为例: 1.首 ...

  3. 15,scrapy中selenium的应用

    引入 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生如果直接用scrapy对其url发请求,是获取不到那部分动态加载出来的数据值,但是通过观察会发现,通过浏览器 ...

  4. Python 包导入

    首先我们先了解下python中寻找模块的顺序 是否是内建模块 ->主目录 ->PYTHONPATH环境变量 ->标准库 -> 首先判断这个model是否是built-in,即内 ...

  5. IOS开发---菜鸟学习之路--(二)-数据获取

    第二篇了. 本篇要讲的是数据获取. 为什么将数据获取放在第二篇就讲呢? 因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始. 可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么 ...

  6. 【Maximum Subarray 】cpp

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

  7. IOS笔记046-UIApplication/导航控制器

    UIApplication 每一个应用都有自己的UIApplication对象,而且是单例的 通过[UIApplication sharedApplication]可以获得这个单例对象 一个iOS程序 ...

  8. vue tradingView(二)

    tradingView 一些配置问题 tradingView 一些配置问题 javascript Demo_Hu 4月17日提问 · 4月17日更新 9 关注 1 收藏,993 浏览 问题对人有帮助, ...

  9. @inerface的11条规范写法

    总结一些interface声明时的规范,相关宏的介绍,定义方法时有用的修饰符,编写注释的规范,最终写出一个合格的头文件. 1.读写权限 1.1实例变量的@public,@protected,@priv ...

  10. /bin , /sbin , /usr/sbin , /usr/local/sbin 的区别

    usr 是 UNIX Software Resource 的缩写,也就是 Unix操作系统软件资源 所放置的目录. 一 /bin:Essential user command binaries(for ...