甘肃省建设工程安全质量监督局网站合肥seo招聘
iOS开发-CMMotionManager传感器陀螺仪
之前开发中遇到需要使用陀螺仪判断是否拍照时候水平判断,如果没有水平拍照,则给出提示。方便用户拍照合适的题目图片。
一、CMMotionManager
CMMotionManager是什么
CMMotionManager 是 Core Motion 库的核心类,负责获取和处理手机的运动信息,它可以获取的数据有
- 陀螺仪,标识设备在三个主轴上的瞬时旋转
- 加速度,标识设备在三维空间中的瞬时加速度
- 磁场信息,标识设备相对于地球磁场的方位
设备运动数据,标识关键的运动相关属性,包括设备用户引起的加速度、姿态、旋转速率、相对于校准磁场的方位以及相对于重力的方位等,这些数据均来自于 Core Motion 的传感器融合算法,从这一个数据接口即可获取以上三种数据,因此使用较为广泛
二、CMMotionManager陀螺仪代码
陀螺仪判断是否拍照时候水平判断
代码如下
#import <Foundation/Foundation.h>
#import <CoreMotion/CoreMotion.h>@interface SDSensorManager : NSObject@property (nonatomic, copy) void (^updateDeviceMotionBlock)(CMDeviceMotion *data);+ (instancetype)shareInstance;- (void)startGyroscope;- (void)stopGyroscope;@end
#import "SDSensorManager.h"static SDSensorManager *shareInstance = nil;@interface SDSensorManager ()@property (nonatomic, strong) CMMotionManager *motionManager;@end@implementation SDSensorManager+ (instancetype)shareInstance {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{shareInstance = [[SDSensorManager alloc] init];shareInstance.motionManager = [[CMMotionManager alloc]init];});return shareInstance;
}- (void)startGyroscope {if (_motionManager.deviceMotionAvailable) {_motionManager.deviceMotionUpdateInterval = 1/30;__weak typeof(self)mySelf = self;[_motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]withHandler:^(CMDeviceMotion *data, NSError *error) {if (mySelf.updateDeviceMotionBlock) {mySelf.updateDeviceMotionBlock(data);}}];}
}- (void)stopGyroscope {[_motionManager stopDeviceMotionUpdates];self.updateDeviceMotionBlock = nil;
}@end
开启判断陀螺仪,根据设备的水平旋转判断是否给出相应的提示。
/**启动陀螺仪*/
- (void)startSenorManager {__weak typeof(self) weakSelf = self;[SDSensorManager shareInstance].updateDeviceMotionBlock = ^(CMDeviceMotion *data){DebugLog(@"gravity.x == %f", data.gravity.x);DebugLog(@"gravity.y == %f", data.gravity.y);CGFloat gravityX = data.gravity.x;CGFloat gravityY = data.gravity.y;BOOL hXShow = NO;BOOL hYShow = NO;if (gravityX > 0.20 || gravityX < -0.20) {// 水平倾斜了hXShow = YES;}if (gravityY > 0.20 || gravityY < -0.20) {// 竖直倾斜了hYShow = YES;}BOOL showCampass = NO;if (hXShow || hYShow) {// 水平倾斜了,可显示CampassImageViewif (weakSelf.showExampleImage || weakSelf.showFrontImageView.image) {// 已经显示了example图片了,则不显示showCampass = NO;} else {showCampass = YES;}}weakSelf.compassImageView.hidden = !showCampass;};[[SDSensorManager shareInstance] startGyroscope];
}
关闭陀螺仪,在不需要使用的时候,关闭陀螺仪。
/**关闭陀螺仪*/
- (void)stopSenorManager {[[SDSensorManager shareInstance] stopGyroscope];
}
三、小结
iOS开发-CMMotionManager传感器陀螺仪,使用CMMotionManager判断陀螺仪、加速度、磁场信息等数据。
学习记录,每天不停进步。