美文网首页
强制横屏问题处理

强制横屏问题处理

作者: DSA碼侬 | 来源:发表于2021-01-20 10:55 被阅读0次

最近需求是开发一款智能游戏控制器GameVController 放入app内,要求必须横屏显示:
环境:
1、TARGETSDeployment InfoDevice Orientation如下:

设置1.png
2、GameVController不用导航控制器包装(为什么?后面讲), 模态方式弹出:
GameViewController *gameVC = [[GameViewController alloc] init];
gameVC.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:gameVC animated:YES completion:nil];

解决办法:

在游戏控制器GameVController内,添加以下代码:

# 1、在返回(dismiss)按钮点击事件上
- (void)backBtnClick:(UIButton *)btn{
    // 消失游戏控制器
    [self dismissViewControllerAnimated:YES completion:^{
        // 强制设备横屏转竖屏(UIDevice的类扩展,下文提供)
        [UIDevice switchNewOrientation:UIInterfaceOrientationPortrait];
    }];
}

# 2、再添加其他方法:
/**
 * 默认所有都不支持转屏,如需个别页面支持除竖屏外的其他方向,请在viewController重写下面这三个方法
 */
// 是否支持自动转屏
- (BOOL)shouldAutorotate{
    return NO; // NO
}
// 支持哪些屏幕方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscapeRight; // 保持一致横屏
}
// 默认的屏幕方向(当前ViewController必须是通过模态出来的UIViewController(模态带导航的无效)方式展现出来的,才会调用这个方法)本控制器不用导航控制器
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeRight; // 保持一致横屏
}

注:
1、UIDevice的扩展类:

#1、UIDevice+QDDevice.h文件
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIDevice(QDDevice)

/**
 * @interfaceOrientation 输入要强制转屏的方向
 */
+ (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation;
@end


#2、UIDevice+QDDevice.m文件
#import "UIDevice+QDDevice.h"

@implementation UIDevice(QDDevice)

+ (void)switchNewOrientation:(UIInterfaceOrientation)interfaceOrientation{
        
    NSNumber *resetOrientationTarget = [NSNumber numberWithInteger:UIInterfaceOrientationUnknown];
    [[UIDevice currentDevice] setValue:resetOrientationTarget forKey:@"orientation"];

    NSNumber *orientationTarget = [NSNumber numberWithInteger:interfaceOrientation];
    [[UIDevice currentDevice] setValue:orientationTarget forKey:@"orientation"];
    
}@end

2、为什么GameVController不用push方式展示游戏导航控制器:
实践证明这样以上的两个方法
(-(UIInterfaceOrientationMask)supportedInterfaceOrientations
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation)
不会被调用, 横屏失败。再说了游戏界面本身也是不需要导航栏的。
若有不对,请指正,万分感激!

相关文章

  • 强制横屏问题处理

    最近需求是开发一款智能游戏控制器GameVController 放入app内,要求必须横屏显示:环境:1、TARG...

  • iOS 横竖屏处理

    开发中有竖屏和横屏的界面时,我们需要监听屏幕旋转,强制横屏,锁定方向后的屏幕强制旋转等处理.以下做个总结: 一.横...

  • android强制横屏竖屏问题

    这个问题再简单不过了,以前用的时候,会把强制横屏和竖屏写在基类里,如: 这次在pad上还是这么用的,我把它强制横屏...

  • iOS:强制横屏的坑

    前段时间我们播放器强制横屏,项目设置允许竖屏,在手机不锁屏状态下,手机横屏会导致播放器强制横屏的时候会导致横屏失败...

  • iOS强制横屏

    iOS强制横屏

  • 强制横屏方法

    强制横屏: 方法一: 关于强制横屏看了很多文章,首先第一个方法是invocation,这个方法可以实现横屏效果,但...

  • 强制横屏

    转载自 :http://blog.csdn.net/zhaotao0617/article/details/525...

  • 强制横屏

    -(void)landscapeAndPortraitChange{UIInterfaceOrientation ...

  • 强制横屏

    1、AppDelegate里设置属性 @property(nonatomic,assign)BOOLallowLa...

  • iOS中单个页面横竖屏切换 点击退出再退回到竖屏。

    在开发项目的时候,遇到了一个问题,就是其中一个页面需要强制横屏,而其他页面要强制竖屏,然后返回在回到横屏,总结了一...

网友评论

      本文标题:强制横屏问题处理

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