IOS屏幕旋转监听

news2024/11/16 13:57:47

1.设计窗口,添加三个按钮 

2.添加事件连接

 3.按钮点击事件实现

先添加三个IBAction

实现IBAction

使用旋转立刻生效

-(IBAction)btnFixPortrait:(id)sender{
    //访问应用程序委托成员
    _app.mask = UIInterfaceOrientationMaskPortrait;//设置窗口旋转属性
    [self setNeedsUpdateOfSupportedInterfaceOrientations];//使用设置立刻生效
    //mask = UIInterfaceOrientationMaskPortrait;//只支持竖屏
}

-(IBAction)btnFixLand:(id)sender{
    _app.mask = UIInterfaceOrientationMaskLandscape;//设置窗口旋转属性
    [self setNeedsUpdateOfSupportedInterfaceOrientations];//使用设置立刻生效
    //mask = UIInterfaceOrientationMaskLandscape;//只支持横屏
}

 

4.监听屏幕旋转事件

//注册屏幕旋转监听
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

//屏幕监听事件处理
-(void)deviceOrientationDidChange{
    NSLog(@"%lu",[self supportedInterfaceOrientations]);
    switch ([UIDevice currentDevice].orientation) {
        case UIInterfaceOrientationUnknown:
            NSLog(@"Unknown");
            break;
        case UIInterfaceOrientationPortrait:
            NSLog(@"Portrait");
            break;
        case UIInterfaceOrientationPortraitUpsideDown:
            NSLog(@"UpsideDown");
            break;
        case UIInterfaceOrientationLandscapeLeft:
            NSLog(@"LandscapeLeft");
            break;
        case UIInterfaceOrientationLandscapeRight:
            NSLog(@"LandscapeRight");
            break;
        default:
            break;
    }
}

 完整示例:

//
//  ViewController.m
//  ios_screen_test
//
//  Created by Hacker X on 2023/10/10.
//

#import "ViewController.h"

@interface ViewController ()
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
-(IBAction)btnGetOrientation:(id)sender;
-(IBAction)btnFixPortrait:(id)sender;
-(IBAction)btnFixLand:(id)sender;
@property(nonatomic) UIInterfaceOrientationMask mask;
@end

@implementation ViewController
@synthesize mask;

- (void)viewDidLoad {
    [super viewDidLoad];
    mask = UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscape;//支持横竖屏切换
    //注册屏幕旋转监听
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
    
    [ViewController getDeviceOrientation];
}

-(IBAction)btnGetOrientation:(id)sender{
    [ViewController getDeviceOrientation];
}
-(IBAction)btnFixPortrait:(id)sender{
    mask = UIInterfaceOrientationMaskPortrait;//只支持竖屏
}

-(IBAction)btnFixLand:(id)sender{
    mask = UIInterfaceOrientationMaskLandscape;//只支持横屏
}

+(void)setPortrait:(UIInterfaceOrientationMask) mask{
    mask = UIInterfaceOrientationMaskPortrait;//只支持竖屏
}

+(void)setLandscape:(UIInterfaceOrientationMask) mask{
    mask = UIInterfaceOrientationMaskLandscape;//只支持横屏
}

+(UIDeviceOrientation)getDeviceOrientation{
    NSLog(@"getDeviceOrientation:%ld",[UIDevice currentDevice].orientation);
    return [UIDevice currentDevice].orientation;
}

//屏幕监听事件处理
-(void)deviceOrientationDidChange{
    NSLog(@"%lu",[self supportedInterfaceOrientations]);
    switch ([UIDevice currentDevice].orientation) {
        case UIInterfaceOrientationUnknown:
            NSLog(@"Unknown");
            break;
        case UIInterfaceOrientationPortrait:
            NSLog(@"Portrait");
            break;
        case UIInterfaceOrientationPortraitUpsideDown:
            NSLog(@"UpsideDown");
            break;
        case UIInterfaceOrientationLandscapeLeft:
            NSLog(@"LandscapeLeft");
            break;
        case UIInterfaceOrientationLandscapeRight:
            NSLog(@"LandscapeRight");
            break;
        default:
            break;
    }
}

- (BOOL)prefersStatusBarHidden {
    return NO;
}

//设置自动旋转
- (BOOL)shouldAutorotate{
    return NO;
}

//重写基类supportedInterfaceOrientations来设置支持方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return mask;
}

@end

上面是针对ViewControlle的,下面是针对 窗口的

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    //return UIInterfaceOrientationMaskAll;
    //return UIInterfaceOrientationMaskPortrait;
    return UIInterfaceOrientationMaskLandscape;
    //默认是这个UIInterfaceOrientationMaskAllButUpsideDown
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有效管理token,充分发挥ChatGPT的能力

目录 给提供了 Token 的计算工具,来理解一下Token的计算方式,网址如下: 窗口如下: 实际消耗 Token 数量为 59个,换算之后为2.1-2.2的比例,即一个汉字消耗2.12.2个Token, 再测一下英文的Token消耗,包含空格在内,一共52个英文字母,消耗Token 13个,正好对应13个单词,…

Linux中shell外壳,用户权限,文件权限

Linux 权限 1.shell外壳1.1 shell外壳的定义1.2 shell外壳的作用1.3 shell的原理 2.Linux用户权限2.1创建普通用户2.2 用户之间的切换2.3 sudo指令 3.Linux文件权限3.1文件访问者的分类(人)3.2 文件文件类型和访问权限(事物属性)3…

1.3 矩阵

一、向量与矩阵 下面是三个向量 u \boldsymbol u u、 v \boldsymbol v v、 w \boldsymbol w w: u [ 1 − 1 0 ] v [ 0 1 − 1 ] w [ 0 0 1 ] \boldsymbol u\begin{bmatrix}\,\,\,\,1\\-1\\\,\,\,\,0\end{bmatrix}\kern 10pt\boldsymbol v\begin{bmatrix}\,\,\,…

洛谷p1618三连击

import java.util.Scanner; //将 1-9 共9个数分成3组,分别组成3个三位数,且使这3个三位数构成A:B:C的比例,试求出所有满足条件的3个三位数。不满足输出“No!!!”。 public class Main {public static void main(String[] args) {Scanner sc …

Linux_Shell运行原理(命令行解释器)

一般我们叫Linux操作系统,狭义上就是指Linux内核(kernel),广义上就是Linux内核Linux外壳程序对应的配套程序,这里我们来详细介绍一下这个“外壳程序”。 在我们使用指令时,这个外壳程序会将我们的解释指令并…

从零开始学习 Java:简单易懂的入门指南之网络编程(三十七)

网络编程 1. 网络编程入门1.1 网络编程概述1.2 网络编程三要素1.3 IP地址1.4 InetAddress1.5 端口和协议 2.UDP通信程序2.1 UDP发送数据2.2UDP接收数据2.3UDP通信程序练习2.4UDP三种通讯方式2.5UDP组播实现2.6UDP广播实现 3. TCP通信程序3.1TCP发送数据3.2TCP接收数据3.3TCP程序…

什么是BFC(块级格式化上下文)?如何创建一个BFC?

BFC,即块级格式化上下文(Block Formatting Context),是CSS中的一个概念,用于描述页面中块级元素如何布局、定位和相互影响的一种机制。BFC是一个独立的渲染区域,具有一定的规则来决定其中元素的排布方式。 创建一个BFC主要有以下几种方法: 1:根元素()自动创建BFC:…

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后,常用的file,view,菜单看不见了,不太适应,找了一下,有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上,应用保存就可以了

Muse 2获取实时脑电数据

Muse 2获取实时脑电数据 之前转载了一篇知乎大佬汇总的采集Muse数据的博客,从亚马逊中国刷到了一个Muse 2,看了下不到2000块,于是果断下单。。。 历时一个月终于到了。。。 试用 需外网才能获取冥想音频资源,然后才能采集数据…

[0xGame 2023 公开赛道] week3

9点停止提交,抓紧时间写出来,明天还有别的题。 PWN edit-shellcode-runtime 可以输入shellcode然后执行,但是禁用了\x0f\x05(syscall,箭头处),这里需要用前边的程序把这个syscall弄出来。我这里最后一个字符输入\x0f…

Node学习笔记之Node简介

一、Node简介 1.1、为什么学习Node(了解) 企业需求 增加自身职业竞争力 进一步理解 Web,并有助于明白后端开发 大前端必备技能 为了更好的学习前端框架 ... ... 1.2、Node是什么 Node.js是基于 Chrome的V8 JavaScript 引擎构建的JavaScript运行环境。 Node.js不是新…

C++特性——inline内联函数

1. 内联函数 1.1 C语言的宏 在C语言中,我们学习了用#define定义的宏函数,例如: #define Add(x, y) ((x) (y)) //两数相加相较于函数,我们知道宏替换具有如下比较明显的优点: 性能优势: 宏在预处理阶段…

数据结构-树的概念结构及存储

🗡CSDN主页:d1ff1cult.🗡 🗡代码云仓库:d1ff1cult.🗡 🗡文章栏目:数据结构专栏🗡 目录 一、树的基本概念及结构 1树的概念 2树的存储 二、二叉树的概念及结构 1二叉树的概…

FPGA的64点FFT代码及报告,verilog快速傅里叶变换

名称:64点FFT快速傅里叶变换Radix4 软件:Quartus 语言:Verilog 代码功能: 使用verilog实现64-point Pipeline FFT处理器 FPGA代码资源下载网:hdlcode.com 代码下载: 名称:64点FFT快速傅里…

保姆级 Keras 实现 Faster R-CNN 十四 (预测)

保姆级 Keras 实现 Faster R-CNN 十四 一. 预测模型二. TargetLayer三. 预测四. 显示预测结果五. 加载训练好的参数六. 效果展示七. 代码下载 上一篇 文章中我们完成了 Faster R-CNN 训练的功能, 现在到了预测部分了 一. 预测模型 因为在预测的时候并不需标签, 所以 RoiLabel…

[Linux打怪升级之路]-system V共享内存

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习目标&…

基于Ubuntu Server编译YTM32 SDK工程

基于Ubuntu Server编译YTM32 SDK工程 文章目录 基于Ubuntu Server编译YTM32 SDK工程需求下载软件包安装与配置配置虚拟机联网模式启用ssh连接启用ftp连接安装armgcc编译工具链确认make工具 验证 需求 在Linux系统环境下搭建SDK的编译环境: 方便加入到持续集成工具…

16.The Tensor Product:Vector/Covector combinations

本节将概括目前为止所学的张量积知识。并讨论一般张量,它可以由任意数量的向量和协向量的任意组合来生成。 同样,也是使用的非标准的符号。 (2,0)阶张量, 由两个向量生成的。 (1,2)阶张…

C++学习之多态详解

目录 多态的实现 例题 重载 重写 重定义的区别 抽象类 多态实现原理 多态的实现 C中的多态是指,当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。多态意味着调用成员函数时,会根据调用函数的对象的类型来执…

Spring IOC之@ComponentScan

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…