获取设备朝向

 [UIDevice currentDevice].orientation

一般情况下可通过以上代码获取设备朝向,但是当设备开启《屏幕旋转锁定》开关后则拿不到准确的设备方向了

//通过设备运动监视器来监听
//初始化
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
//设置更新频率,默认值为0.01,就算设置为0也是0.01,值越小更新越快
motionManager.deviceMotionUpdateInterval = 0.3;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error) {
            double x = deviceMotion.gravity.x;
    double y = deviceMotion.gravity.y;
    
    if (fabs(y) >= fabs(x)) {
        if (y >= 0) {
            //UIDeviceOrientationPortraitUpsideDown
        }else {
            //UIDeviceOrientationPortrait
        }
    }else {
        if (x >= 0) {
            //UIDeviceOrientationLandscapeRight
        }else {
            //UIDeviceOrientationLandscapeLeft
        }
    }
}];

这里通过监听设备运动来识别设备朝向,也可通过重力感应来监听,但重力感应监听在设备水平拿的时候得到的是 faceUp/faceDown,如果此朝向需求用于摄像头方向设定还是用以上监听比较准确

你可能感兴趣的:(获取设备朝向)