需求如下:

1.app整体只能竖屏,部分页面才可以横屏

2.app整体只能竖屏,部分页面也是竖屏,但是点击某个按钮可以使当前页面变为横屏,如全屏视频播放键。

需求1解决方法:

1.在targets - general中设置设备支持方向如下,确保设备各个方法均支持

屏幕快照 2016-12-08 下午6.41.26.png

2.在appdelegate的.h文件声明属性来标记当前设备方向@property (assign , nonatomic)UIInterfaceOrientation interfaceOrientation;

在appdelegate的.m文件中:- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window {

if(self.interfaceOrientation == UIInterfaceOrientationUnknown) { // 直播间用

return UIInterfaceOrientationMaskAllButUpsideDown;

} else if(self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {

//交易页面横屏用

return UIInterfaceOrientationMaskLandscapeRight;

} else {        return UIInterfaceOrientationMaskPortrait;

}

}

3.在需要横屏的ViewController的ViewWillApper方法里面:Appdelegate *delegate =p.p1[UIApplication sharedApplication].delegate;

delegate.canRotate = YES;

需求2解决方法:

方法1:

1.在targets - general中设置设备支持方向如下,确保整体都是竖屏

屏幕快照 2016-12-08 下午6.30.25.png

2.在横屏(如button点击)事件处,代码如下- (void)fullScreenBtnAction {    if (_isNormalOrientation) {   // 如果当前是默认的竖屏

//注:当前self是UIView对象,如果是VC,则为self.view.....

self.frame = CGRectMake(0, 0, kScreenSize.height, kScreenSize.width);        CGRect frame = [UIScreen mainScreen].applicationFrame;        // transfrom会以当前center为锚点旋转,所以旋转后位置有偏移,需要处理

CGPoint center = CGPointMake(frame.origin.x + ceil(frame.size.width/2), frame.origin.y + ceil(frame.size.height/2));        self.center = center;

//取状态栏旋转时间//        CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration: 0.3];        self.transform = CGAffineTransformMakeRotation(M_PI_2);

[UIView commitAnimations];

} else {

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration: 0.3];        self.transform = CGAffineTransformIdentity;

[UIView commitAnimations];        //_originRect是进入横屏前self的frame

self.frame = _originRect;

}

_isNormalOrientation = !_isNormalOrientation; //更改状态}

***方法2:

1.在targets - general中设置设备支持方向如下,确保设备各个方法均支持 (弃用  可不设置)

屏幕快照 2016-12-08 下午6.41.26.png

2.在appdelegate的.h文件声明属性interfaceOrientation标记方向@property (assign , nonatomic)UIInterfaceOrientation interfaceOrientation;

在appdelegate的.m文件中实现设备方向方法:- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window {

if(self.interfaceOrientation == UIInterfaceOrientationUnknown) { // 直播间用

return UIInterfaceOrientationMaskAllButUpsideDown;

} else if(self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) { //交易页面横屏用

return UIInterfaceOrientationMaskLandscapeRight;

} else {        return UIInterfaceOrientationMaskPortrait;

}

}横竖屏转换://转换到竖屏- (void)rotateToPortraitScreenWithInvocation {

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

SEL selector = NSSelectorFromString(@"setOrientation:");

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];

[invocation setSelector:selector];

[invocation setTarget:[UIDevice currentDevice]];

int val = UIDeviceOrientationPortrait;

[invocation setArgument:&val atIndex:2];

[invocation invoke];

delegate.interfaceOrientation = UIInterfaceOrientationPortrait;

}//转换到横屏模式- (void)rotateToLandscapWithIncovation {

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

delegate.interfaceOrientation = UIInterfaceOrientationUnknown;

SEL selector = NSSelectorFromString(@"setOrientation:");

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];

[invocation setSelector:selector];

[invocation setTarget:[UIDevice currentDevice]];

int val = UIInterfaceOrientationLandscapeRight;

[invocation setArgument:&val atIndex:2];

[invocation invoke];

}

作者:CoderYZY

链接:https://www.jianshu.com/p/95cdf3262bc6

ios键盘横屏_iOS 强制横屏、部分横屏等功能实践相关推荐

  1. ios键盘横屏_iOS横竖屏旋转及其基本适配方法 转

    目录 一.最让人纠结的三种枚举 二.两种屏幕旋转的触发方式 三.屏幕旋转控制的优先级 四.开启屏幕旋转的全局权限 五.开启屏幕旋转的局部权限(视图控制器) 六.实现需求:项目主要界面竖屏,部分界面横屏 ...

  2. Flutter android及ios强制竖屏/横屏

    Flutter android及ios强制竖屏/横屏 在main.dart内设置即可 在main.dart内设置即可 void main(){WidgetsFlutterBinding.ensureI ...

  3. ios中html怎么横屏,iOS如何实现强制转屏、强制横屏和强制竖屏的实例代码

    本文介绍了iOS如何实现强制转屏.强制横屏和强制竖屏的实例代码,分享给大家 今天项目中遇到正在看视频的时候账号被挤,如果当时是横屏的情况下,需要强制竖屏.真头疼,网上找了好多方法,终于解决啦.O(∩_ ...

  4. Flutter强制某个页面横屏

    1.问题描述 在某个页面中使用flutter提供的方式来强制某个页面横屏: SystemChrome.setPreferredOrientations([DeviceOrientation.portr ...

  5. Android开发之强制横屏和强制竖屏

    原文地址:https://blog.csdn.net/qq_37219980/article/details/71194313 强制竖屏设置 1.代码在Activity的onResume方法中添加如下 ...

  6. Android4.4.2KK竖屏强制更改为横屏的初步简略方案

    点击打开链接 解决方案: 当前是根据当前问题场景即竖屏强制更改为横屏的需求而做的改动,基本是hardcode定义的状态,总共修改有效代码行数5行,如果后续有其他需求或者需要更灵活的配置横屏和竖屏,可以 ...

  7. 小胖说事30------iOS 强制转成横屏的方式

    一直遇到这个问题,今天最终找到了解决方法. 在我们的项目中常常遇到横竖屏切换,而又有某个特定的界面必须是特定的显示方式(横屏或竖屏).这就须要例如以下的处理了. 强制转成横屏:if ([[UIDevi ...

  8. 三星手机拍照强制切换到横屏及照片旋转问题

    最近在做项目,项目里面有拍照上传的功能,无非就是吊起系统拍照功能,然后获取所拍照的地址,然后上传即可.但是当我无意间拿了一部三星手机装了App之后,当使用拍照功能的时候,拍完之后,界面并没有出现所拍的 ...

  9. H5页面 ios 键盘收起后弹出层焦点错位

    请注明出处:https://blog.csdn.net/qq_23179075/article/details/86497498 解决H5页面 ios键盘收起后弹出层焦点错位问题 用 H5 写app页 ...

最新文章

  1. SQL中游标的使用(转)
  2. eclipse log4j 日志直接定位到source
  3. 封装案例-02-创建(qiang)类
  4. 破站www.2637.cn居然敢截持偶的IE!
  5. Upload LABS Pass-9
  6. Python中字符串格式化输出的学习笔记
  7. solr搭建(linux)
  8. 简述deque容器的插入删除原理
  9. Linux系统下载Unity-Tweek-Tool
  10. android 人脸 动画表情包,巧笑表情包怎么制作 Android好玩的emoji人脸表情软件推荐...
  11. 动态添加element标签,数据操作
  12. AtCoder Beginner Contest 062(CD)
  13. ios实现video自动播放
  14. 从 Chrome 源码看浏览器如何计算 CSS
  15. C语言C Prime总结(2-7章)
  16. 如何用c语言给信息加密,求助:如何用C语言实现LFSR加密
  17. 等精度测频原理--频率计
  18. mysql查看指定全局变量_【全局变量】mysql查看全局变量以及设置全局变量的值...
  19. Linux so库查看工具
  20. 程序员要从“美团崩溃”中学习的痛点

热门文章

  1. 从零写一个操作系统之booting
  2. android2048项目报告,Android项目开发实战-2048游戏
  3. Google的一个代理网站: 仅限技术搜索
  4. 百度数据可视化Sugar BI 数据自动补全
  5. Android读写日历,android – 读写日历
  6. 噩梦射手(SurvivalShooter)教程(九)
  7. python字体类型arial_python-3.x - 为什么我的font.name属性不影响使用Python-pptx制作的ppt上的字体? 我总是得到arial字体 - 堆栈内存溢出...
  8. 微信服务号解决开启服务配置后自定义菜单失效的方法
  9. Node.js相关资源
  10. 《区块链技术原理》笔记