https://www.jianshu.com/p/ea1682e80003

先讲需求:

APP中所有界面支持竖屏,只有在一个界面,点击一个btn之后变成横屏,再点就是竖屏。
在网上找了一些方法,发现实现不了,遂问了一个做过这个功能的朋友,得到朋友的支持之后,顺利解决这一问题

 
在这里因为是要全局界面都是支持竖屏,其他的不支持,在Xcode里面的配置

 
Xcode配置

然后就是在AppDelegate中添加属性和方法,

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
//是否强制横屏
@property (nonatomic, assign) BOOL isForceLandscape;
//是否强制竖屏
@property (nonatomic, assign) BOOL isForcePortrait; @end
添加属性
 
在AppDelegate中添加方法 
-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
if (self.isForceLandscape) {
return UIInterfaceOrientationMaskLandscape;
}else if (self.isForcePortrait){
return UIInterfaceOrientationMaskPortrait;
}else{
return UIInterfaceOrientationMaskPortrait;
}
}

一下是viewController中,即需要转换屏幕方向的.m文件的代码:

#import "ViewController.h"
#import "AppDelegate.h"
@interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // _currentOrient = [UIApplication sharedApplication].statusBarOrientation; UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:@"转一转" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button addTarget:self action:@selector(changeFrame:) forControlEvents:UIControlEventTouchUpInside];
button.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:button]; NSLayoutConstraint * centerX = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
NSLayoutConstraint * centerY = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0];
NSLayoutConstraint * width = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100];
NSLayoutConstraint * height =[NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44]; [NSLayoutConstraint activateConstraints:@[centerX,centerY,width,height]];
centerY.active = YES;
centerX.active = YES;
width.active = YES;
height.active = YES; }
// 允许自动旋转
-(BOOL)shouldAutorotate{
return YES;
}
// 横屏时是否将状态栏隐藏
-(BOOL)prefersStatusBarHidden{
return NO;
}
-(void)changeFrame:(UIButton *)btn{ btn.selected = !btn.selected; if (btn.selected) {
[self forceOrientationLandscapeWith:self];
}else{
[self forceOrientationPortraitWith:self];
}
}
// 横屏 home键在右边
-(void)forceOrientationLandscapeWith:(UIViewController *)VC{ AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
appdelegate.isForcePortrait=NO;
appdelegate.isForceLandscape=YES;
[appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:VC.view.window]; //强制翻转屏幕,Home键在右边。
[[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeRight) forKey:@"orientation"];
//刷新
[UIViewController attemptRotationToDeviceOrientation];
}
// 竖屏
- (void)forceOrientationPortraitWith:(UIViewController *)VC{ AppDelegate *appdelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
appdelegate.isForcePortrait=YES;
appdelegate.isForceLandscape=NO;
[appdelegate application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:VC.view.window]; //强制翻转屏幕
[[UIDevice currentDevice] setValue:@(UIDeviceOrientationPortrait) forKey:@"orientation"];
//刷新
[UIViewController attemptRotationToDeviceOrientation];
}

这样就实现了点击切换屏幕方向的需求,嘻嘻!!

iOS界面横屏竖屏随意切换的更多相关文章

  1. activity横屏竖屏的切换

    原理: 其实总结起来,我们可以得到以下的一些结论 1.当内存不足(不容易模拟).切屏时会调用onSaveInstanceState().onRestoreInstanceState()方法 对于onS ...

  2. cocos2d-x ios 设置横屏/竖屏(全)

    Cocos2d-x项目\iOS\RootViewController.mm文件中. 以下方法任选其一即可…      本人机子函数二ok! 函数一: (BOOL)shouldAutorotateToI ...

  3. 【转】Android 模拟器横屏竖屏切换设置

    http://blog.csdn.net/zanfeng/article/details/18355305# Android 模拟器横屏竖屏切换设置时间:2012-07-04   来源:设计与开发   ...

  4. android界面横屏和竖屏的切换

    关于android横屏和竖屏的切换网上给了很多种.但是有些介绍的方法都是在android旧版本上. 我现在把握用到的情况写下来用于备忘: android 版本:4.0 - 4.4 要求:android ...

  5. Android横屏竖屏切换的问题

    Android横屏竖屏切换的问题 http://blog.sina.com.cn/s/blog_77c632410101790w.html

  6. Android——横屏和竖屏的切换,以及明文密码的显示

    查看API文档: android.content.pm.ActivityInfo    在手机的使用中,我们要根据不同的需求来改变屏幕的显示方向,一般在浏览信息时是竖屏,在玩游戏的时候就要切换到横屏. ...

  7. vue手机端横屏竖屏切换

    1.建一个空白的vue文件,添加上如下代码 data() { this.$router.go(-1) return {} }   2.在需要横屏竖屏切换的页面中加入如下代码: beforeMount( ...

  8. js 横屏 竖屏 相关代码 与知识点

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  9. Android之横屏竖屏显示问题

    1.採用不同的布局文件 在res下创建目录layout-land 在该目录下写入的layout(xml文件)横屏的时候系统自己主动选择显示的layout 同理: 在res下创建目录layout-por ...

  10. HTML5中判断横屏竖屏

    在移动端中我们经常碰到横屏竖屏的问题,那么我们应该如何去判断或者针对横屏.竖屏来写不同的代码呢. 这里有两种方法: 一:CSS判断横屏竖屏 写在同一个CSS中 1 2 3 4 5 6 @media s ...

随机推荐

  1. 【驱动】libjpeg 库的移植

    1.下载库  http://www.ijg.org/  下载  jpegsrc.v9e.tar.gz 2.准备好空文件夹位置 opt/libdecode  opt/libdecode/lib  opt ...

  2. Visio中的图无失真导入LaTeX中

    参考网址: LaTeX导入图片不失帧的方法_奋斗的西瓜瓜的博客-CSDN博客_latex图片模糊 LaTeX中插入eps格式图片_不觉岁华成暗度的博客-CSDN博客_eps latex Visio图片 ...

  3. docker 安装 elasticsearch7.6.2 kibana7.6.2

    [root@abcdefg bin]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6896f6e3202c ...

  4. 实验1task2

    <实验结论> #include <stdio.h> #include <stdlib.h> int main() { int n,sum; scanf(" ...

  5. Android Studio相关配置说明

    介绍:Android Sdutio 是谷歌推出的一个 Android 集成开发工具. 现已将 SDK(software development kit)集成到 Android Studio 中.可以直 ...

  6. 日志服务器 nagios log server

    官网 https://www.nagios.com/products/ 可官网下载手动安装也可命令安装 命令安装 cd /tmp wget https://assets.nagios.com/down ...

  7. 力扣51. N 皇后(回溯法)

    按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回 ...

  8. Unity 在2D中实现LookAt,跟随鼠标转动

    Vector3 v = (target.position - transform.position).normalized; transform.right = v;

  9. drush .. drupal console

    "You can run both." They compliment each other, yet the final decision is yours. Especiall ...

  10. centos7 启动报错 Failed to mount /sysroot

    centos7 启动报错 Failed to mount /sysroot   场景: centos7系统异常关闭后,启动后进入不了图形化界面 解决方法: 1. 定位报错原因 进入单用户模式后执行下面 ...