iOS 获取设备的方向

1. 没有锁屏的状态下获取设备方向

UIDevice *device = [UIDevice currentDevice];

但是当设备不能旋转的时候,此方法就不能获取到设备方向了。

2. 锁屏状态或者打开竖屏锁定获取设备方向

当设备不能旋转的时候,我们可以通过CMMotionManager类来计算设备的方向,如下代码:

@property(nonatomic,strong)CMMotionManager *cmmotionManager;

if([self.cmmotionManager isDeviceMotionAvailable]) {
    [self.cmmotionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        AVCaptureVideoOrientation orientationNew;
        if (acceleration.x >= 0.75) {//home button left
            orientationNew = UIDeviceOrientationLandscapeRight;
        }
        else if (acceleration.x <= -0.75) {//home button right
            orientationNew = UIDeviceOrientationLandscapeLeft;
        }
        else if (acceleration.y <= -0.75) {
            orientationNew = UIDeviceOrientationPortrait;
        }
        else if (acceleration.y >= 0.75) {
            orientationNew = UIDeviceOrientationPortraitUpsideDown;
        }
        else {
            // Consider same as last time
            return;
        }
    }];
}

这段代码中,当手机处于竖屏倾斜大约45度的情况下,代码会执行到 Consider same as last time 处,因此此处可以给个默认值是竖屏的(竖屏我自己设置,当然也可以设置其他的,根据需求),直接返回,会获取不到手机的方向。

转载于:https://my.oschina.net/yitongtong/blog/912022

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值