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
处,因此此处可以给个默认值是竖屏的(竖屏我自己设置,当然也可以设置其他的,根据需求),直接返回,会获取不到手机的方向。