前言:
今天项目中度打算添加直播推流的功能,其中有一个需求,感觉没啥用处,但是产品又必须要添加的功能,就是要在打开推流页面的时候要先看手机是否是竖屏的状态,如果是竖屏,那么就要给个半透明的遮罩,要求用户横过来手机录制。
问题是我们app只支持竖屏,所以暂时获取不到横竖屏的状态,所以就考虑从一个系统库如入手 <CoreMotion/CoreMotion.h>
,我们可以通过加速器来获取手机的横竖屏的情况,代码如下:
#import <CoreMotion/CoreMotion.h>
@property (nonatomic, strong) CMMotionManager *motionManager;
CMMotionManager *manager = [[CMMotionManager alloc] init];
self.motionManager = manager;
if (self.motionManager.accelerometerAvailable) {
manager.deviceMotionUpdateInterval = 1;
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion * _Nullable motion,
NSError * _Nullable error) {
double gravityX = motion.gravity.x;
double gravityY = motion.gravity.y;
double gravityZ = motion.gravity.z;
// zAngle是手机与水平面的夹角也就是前后旋转手机, xyAngle是手机左右旋转的角度
double zAngle = atan2(gravityZ,sqrtf(gravityX * gravityX + gravityY * gravityY)) / M_PI * 180.0;
double xyAngle = atan2(gravityX, gravityY) / M_PI * 180.0;
NSLog(@"手机与水平面的夹角 --- %.4f, 手机左右旋转的角度为 --- %.4f", zAngle, xyAngle);
//下面根据自己的需求两个自行判断即可
if (zAngle < 140.0 && xyAngle > 40.0) {//home往左
NSLog(@"************home往左横屏了************");
}
if (zAngle < -60.0 && xyAngle > -120.0){//home往右
NSLog(@"************home往右横屏了************");
}
}];
}
然后在退出页面的时候记得要将这个功能停止,否则消耗内存
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.motionManager stopDeviceMotionUpdates];
}