ios开发某个页面横不过来屏幕的时候
某一个页面需要横屏,其他的页面任然保持竖屏需要以下关键的几个步骤:
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开发某个页面横不过来屏幕的时候的更多相关文章
- iOS开发学习-放大长图与屏幕等宽
/* 需要得到一个图片的放大比例,这个比例就是屏幕的宽度与图片真实宽度的比值 */ CGFloat newZoomScale = LZ_SCREEN_WIDTH / [_photoImageView. ...
- iOS开发 个别页面是否支持页面旋转
- (BOOL)shouldAutorotate { return YES; }
- iOS开发解决页面滑动返回跟scrollView左右划冲突
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithG ...
- iOS开发-委托(Delegate)浅谈
委托其实并不是OC中才有,C#中也有,不过彼此的理解方式是不一样的,OC中委托是协议的一种,需要使用@protocol声明,委托一般在iOS开发中页面中传值用的比较多.委托是Cocoa中最简单.最灵活 ...
- IOS开发之绝对布局和相对布局(屏幕适配)
之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下 ...
- iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换
iOS开发 横向分页样式 可左右滑动或点击头部栏按钮进行页面切换 不多说直接上效果图和代码 1.设置RootViewController为一个导航试图控制器 // Copyright © 2016年 ...
- 谈谈iOS开发如何写个人中心这类页面--静态tableView页面的编写
本文来自 网易云社区 . 一.本文讲的是什么问题? 在开发 iOS 应用时,基本都会遇到个人中心.设置.详情信息等页面,这里截取了某应用的详情编辑页面和个人中心页面,如下: 我们以页面结构的角度考虑这 ...
- iOS开发点滴:iPhone屏幕适配
最近开始做iOS开发,遇到一些小问题和解决方法,记录下. 今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...
- iOS开发之各种动画各种页面切面效果
因工作原因,有段时间没发表博客了,今天就发表篇博客给大家带来一些干货,切勿错过哦.今天所介绍的主题是关于动画的,在之前的博客中也有用到动画的地方,今天就好好的总结一下iOS开发中常用的动画.说道动画其 ...
随机推荐
- Go语言之反射(一)
反射 反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息.支持反射的语言可以在程序编译期将 ...
- Day24&25&26&27:HTML+CSS
1.网页得三大组成:HTML(标签.皮影的小人) \CSS(布局,皮影的装束) \JS(动作,皮影的操纵者) 2.HTML目录树 3.HTML-标签 成对<>组成,不区分大小写,自闭合标签 ...
- Linux服务器管理员必备Linux命令TOP5
Linux桌面环境的界面友好度.图形性能及附件工具已经大幅进化,然而Linux服务器却还没有能达到这一步. 作为系统管理员必须熟练掌握Linux命令.Linux命令的内容很多,其中的一些TOP命令对于 ...
- error C2011: “Picture”:“struct”类型重定义
今天引用外来库时出现问题,也许是版本问题. 错误如下: .....\oursun\cincludes\quickdraw.h(309): error C2011: “Picture”:“struct” ...
- Python-S9-Day87——admin的使用
01 admin的使用1 02 admin的使用2 03 admin的使用3 04 url方法的使用 05 单例模式 06 admin源码之注册功能 07 admin源码之url设计 08 admin ...
- Visual C++ 经典的人脸识别算法源代码
说明:VC++ 经典的人脸识别算法实例,提供人脸五官定位具体算法及两种实现流程. 点击下载
- Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...
- linux常用命令(复制)
显示目录和文件的命令 Ls:用于查看所有文件夹的命令. Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容 Du:显示目录或文件大小 修改目录,文件权限和属主及数组命令 ...
- activemq 简单聊天
有兴趣加群qq:200634530
- Fragment控件初始化
代码改变世界 Fragment控件初始化 @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup ...