iOS:强制横屏的坑

前段时间我们播放器强制横屏,项目设置允许竖屏,在手机不锁屏状态下,手机横屏会导致播放器强制横屏的时候会导致横屏失败,下面是强制横屏的解决办法以及我的探究.

首先,在【General】-->【Device Orientation】设置仅支持竖屏


image.png

接下来在AppDelegate中设置

在AppDelegate.h中添加是否允许横屏的标记

/***  是否允许横屏的标记 */
@property (nonatomic,assign)BOOL allowRotation;

在AppDelegate.m中添加转屏的代理方法

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {

    if (self.allowRotation) {
        return UIInterfaceOrientationMaskLandscapeRight;
    }
    return UIInterfaceOrientationMaskPortrait;
}    

先设置

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

接下来有两种办法可以在某个界面设置强制横屏
第一种.先把设备状态设置为竖屏,再强制横屏

//这句话是防止手动先把设备置为横屏[设备已经倾斜],导致下面的语句失效.
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"];
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];

第二种.设置强制横屏,再调用

[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
   //让屏幕方向与设备方向统一
[UIViewController attemptRotationToDeviceOrientation];

这样就解决手机不锁屏状态下的强制横屏导致的问题,但是为什么产生这些问题呢,请看下我接下来的探究.

接下来说下横屏失败的原因:
用户先向左转了设备的方向才点击横屏,在强制页面向右(也就是设备向左)横屏时,虽然项目是只允许竖屏的,屏幕界面方向也一直是竖屏的,但设备本身的方向(也就是[UIDevice currentDevice].orientation)其实已经是向左,此时其实kvc强制设置的值和本来的值是一样的,这就导致了屏幕界面不转动,所以可以先强制转到另一个方向再转回来,或者使用attemptRotationToDeviceOrientation方法使屏幕界面和设备方向同步。其他方向同理,另外,若用户启用了设备方向锁,用户无论如何旋转设备其设备方向都不变,也就不会有此问题。

下面是我的思路:
在屏幕没有锁定的时候,手机为横屏的时候,播放器横屏时候没有横屏

[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];

但是播放器界面并没有变为全屏,根据效果我觉得有可能是宽高问题导致的,因此我先获取手机的屏幕方向

[UIApplication sharedApplication].statusBarOrientation

在获取手机的设备方向

[UIDevice currentDevice].orientation

发现屏幕方向和设备方向不一致


image.png

接下来使屏幕方向和设备方向一致,就可以解决问题

参考文章
iOS 获取屏幕方向

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • 失眠的夜 星星也入眠 焦虑恣意蔓延 忆及逝去时光 如雨打明窗般失真 满目苍凉 物是人非 爱与不爱已不再重要 从举棋...
    如雾起时阅读 371评论 0 0
  • 很多人都知道吸引力法则,把它落地融入生活的人却鲜少见得。生活像是一幅场景画作,除却内容,更讲究色调丰富,...
    默然不语了阅读 492评论 0 1
  • (一) 塞外的春天总是姗姗来迟,几树胡杨起了新芽,沙棘也从乌青变成了油绿,灰秃秃的荒漠里只有风沙依然如故。 落日古...
    草烬丶阅读 1,211评论 7 13
  • 遇见最好的自己 生活像河流一样永远前行,不会停止,在这个过程中总会遇到险滩或者阴霾。我们不是哲学家,也并非俗世出尘...
    紫贝壳1阅读 209评论 0 0