美文网首页iOS开发笔记
iOS开发 详解强制屏幕旋转的方法

iOS开发 详解强制屏幕旋转的方法

作者: 嫌疑人zx | 来源:发表于2016-11-14 15:39 被阅读454次

第一步:

首先,我定义了一个变量isFullScreen,用于判断当前视图是处于横屏状态还是竖屏状态。YES为横屏,NO为竖屏。

BOOL _isFullScreen

第二步:

我写了一个方法用于执行转屏的操作,不论是横屏,还是竖屏操作都可以调用这个方法,里面会根据当前的状态,判断是该横屏还是竖屏!

- (void)changeScreenAction{
    SEL selector=NSSelectorFromString(@"setOrientation:");
    NSInvocation *invocation =[NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
    [invocation setSelector:selector];
    [invocation setTarget:[UIDevice currentDevice]];
    int val = _isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait;
    [invocation setArgument:&val atIndex:2];
    [invocation invoke];
}
解析:
  1. 找到setOrientation:方法对应的SEL类型的数据,我用了一个局部变量selector暂存起来
   SEL selector=NSSelectorFromString(@"setOrientation:");

2.NSInvocation 是实现命令模式的一种,可以调取任意的SEL或block。当NSInvocation被调用,它会在运行时,通过目标对象去寻找对应的方法,从而确保唯一性。
NSInvocation创建方法

+ (NSInvocation *)invocationWithMethodSignature:(NSMethodSignature *)sig;

NSMethodSignature是一个方法签名的类,通常使用下面的方法,获取对应方法的签名

[消息接受者 instanceMethodSignatureForSelector:selector];

eg:

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

3.设置方法:

[invocation setSelector:selector];

4.设置执行方法的对象

[invocation setTarget:[UIDevice currentDevice]];

5.判断当前的状态是横屏还是竖屏。利用三目运算符,得到UIInterfaceOrientationLandscapeRight(横屏)或UIInterfaceOrientationPortrait(竖屏),得到的结果其实是一个枚举,如下:

typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
    UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
}

对应的代码如下:

int val = _isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait;

6.设置执行方法的参数

- (void)setArgument:(void *)argumentLocation atIndex:(NSInteger)idx;

argumentLocation传递的是参数的地址。index 从2开始,因为0 和 1 分别为 target 和 selector。
7.调用这个方法

[invocation invoke];

参考:NSInvocation 的使用之——强制屏幕旋转

相关文章

  • iOS-屏幕旋转截屏相关

    本篇收录各种屏幕旋转知识点等. 1.详解iOS开发中处理屏幕旋转的几种方法2.iOS 个别页面强制横屏,其他页面竖...

  • iOS开发 详解强制屏幕旋转的方法

    第一步: 首先,我定义了一个变量isFullScreen,用于判断当前视图是处于横屏状态还是竖屏状态。YES为横屏...

  • iOS Rotation

    iOS屏幕旋转学习笔记iOS开发中使用屏幕旋转功能的相关方法 1、基本知识点解读 了解屏幕旋转首先需要区分两种 o...

  • iOS 部分界面强制横屏与强制竖屏

    最新屏幕强制旋转详见 强制横屏(此方法为旋转视图) 恢复竖屏

  • iOS 强制旋转屏幕

    项目需求: 我只是以第一个需求为例,第二种情况,道理相同。 无需强行选中 Device Orientation 中...

  • iOS 强制旋转屏幕

    前言 在开发中有时会碰到旋转屏幕的需求,例如直播时横竖屏推流,这里我使用的一种方法时用纯代码强制翻转,其他晚上方法...

  • iOS强制屏幕旋转

    最近项目需要展现一些图表,需要在用到的页面将页面设置为横屏,查阅整理出三个方案记录下来。其中方案一和方案二整个页面...

  • iOS强制旋转屏幕

    // 状态栏动画持续时间CGFloat duration = [UIApplication sharedAppli...

  • iOS  关于屏幕强制旋转的方法

    参考链接:iOS屏幕旋 首先选择支持的旋转方向(两种方法,推荐第二种)(1)修改Info.plist文件,见图1 ...

  • 屏幕旋转和弹出框

    iOS中控制屏幕旋转相关方法 shouldAutorotate:是否支持屏幕旋转 alertView:clicke...

网友评论

    本文标题:iOS开发 详解强制屏幕旋转的方法

    本文链接:https://www.haomeiwen.com/subject/kpphpttx.html