[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,如果此朝向需求用于摄像头方向设定还是用以上监听比较准确