加速计CoreMotion - (Obj-C)

UIAccelerometer在iOS 5中已经过期,iOS 4以后使用CoreMotion.framework
不只包含加速计,是一个对传感器统一管理的框架

需要先导入<CoreMotion/CoreMotion.h>头文件,然后创建一个管理者

CoreMotion中获取传感器数据有两种方式
1.Push : 系统主动推送给客户端 实时性强,能耗大
2.Pull : 客户端主要向系统去获取数据 实时性差,能耗小,按需获取

通过是否设置更新间隔来区分,一旦设置了更新间隔,表示使用Push方式,如果使用Pull方式,按需获取,通过管理者的accelerometerData属性直接得到数据

Push方式,示例代码:

#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>

@interface ViewController ()
// 运动管理者
@property (nonatomic,strong) CMMotionManager *manager;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建运动管理者 (因为检测操作是一个耗时操作,实时回调,所以需要一个强引用)
    self.manager = [[CMMotionManager alloc]init];
    // 设置更新间隔
    self.manager.accelerometerUpdateInterval = 1.0f;
    // 开启监测
    [self.manager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        
        CMAcceleration acceleration = accelerometerData.acceleration;
        NSLog(@"%f, %f, %f",acceleration.x, acceleration.y, acceleration.z);
        
    }];
    
}

@end

Pull方式,示例代码:

#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>

@interface ViewController ()
// 运动管理者
@property (nonatomic,strong) CMMotionManager *manager;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建运动管理者 (因为检测操作是一个耗时操作,实时回调,所以需要一个强引用)
    self.manager = [[CMMotionManager alloc]init];
    // 开启监测
    [self.manager startAccelerometerUpdates];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    // 最新的采样数据
    CMAccelerometerData *accelerometerData = self.manager.accelerometerData;
    CMAcceleration acceleration = accelerometerData.acceleration;
    NSLog(@"%f, %f, %f",acceleration.x, acceleration.y, acceleration.z);
    
}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,810评论 19 139
  • 磁力计用来检测地球磁场,与加速计、陀螺仪一样,需要先导入<CoreMotion/CoreMotion.h>头文件,...
    ShenYj阅读 2,990评论 0 1
  • 一、概念 加速计:通过感知特定方向的惯性力总量,测量x,y,z轴三个方向的加速度。 陀螺仪:测量绕x、y、z三个方...
    Uncle鹏阅读 8,238评论 0 2
  • 与加速计一样,需要先导入<CoreMotion/CoreMotion.h>头文件,然后创建一个管理者 CoreMo...
    ShenYj阅读 3,301评论 0 4
  • 猜猜运用以下哪个传感器:点这里下载(下载了,记得点星星,谢谢!) 传感器的...
    在逃科学家阅读 6,955评论 0 1

友情链接更多精彩内容