iOS:CoreMotion框架--加速计的简单使用

这是网上的加速计的原理 : 说的已经很好了 我就不解释了


iOS:CoreMotion框架--加速计的简单使用_第1张图片
Paste_Image.png

方向感应器的实现靠的是iPhone的内置加速计。iPhone所采用的加速计是三轴加速计,分为X轴、Y轴和Z轴。这三个轴所构成的立体空间足以侦测到你在iPhone上的各种动作。在实际应用时通常是以这三个轴(或任意两个轴)所构成的角度来计算iPhone倾斜的角度,从而计算出重力加速度的值。
通过感知特定方向的惯性力总量,加速计可以测量出加速度和重力。iPhone的三轴加速计意味着它能够检测到三维空间中的运动或重力引力。因此,加速计不但可以指示握持电话的方式(或自动旋转功能),而且如果电话放在桌子上的话,还可以指示电话的正面朝上还是朝下。
加速计可以测量重力引力(g),因此当加速计返回值为1.0时,表示在特定方向上感知到1g.如果是静止握持iPhone而没有任何动作,那么地球引力对其施加的力大约为1g.如果是纵向竖直地握持iPhone,那么iPhone会检测并报告在其y轴上施加的力大约为1g。如果是以一定角度握持 iPhone,那么这1g的力会分布到不同的轴上,这取决于握持iPhone的方式。当以45度角握持iPhone时,1g的力会均匀的分解到两个轴上。
正常使用时,加速计在任一轴上都不会检测到远大于1g的值。如果检测到的加速计值远大于1g,那么即可判断这是突然动作。如果摇动、坠落或是投掷iPhone,那么加速计便会在一个或多个轴上检测到很大的力。

加速计使用push方式 获取轴的值 push方式 是实时更新的

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'PingFang SC'; color: #4bd157}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #00b1ff}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4bd157}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff}span.s1 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s2 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s5 {font-variant-ligatures: no-common-ligatures; color: #de38a6}span.s6 {font-variant-ligatures: no-common-ligatures; color: #08fa95}span.s7 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures}span.s8 {font-variant-ligatures: no-common-ligatures; color: #8b87ff}span.s9 {font-variant-ligatures: no-common-ligatures; color: #4bd157}span.s10 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures; color: #4bd157}span.s11 {font-variant-ligatures: no-common-ligatures; color: #00b1ff}span.s12 {font-variant-ligatures: no-common-ligatures; color: #ff4647}span.s13 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures; color: #ff4647}

    //创建运动管理者对象
    self.CMmanager=[CMMotionManager new];
    //使用push的方式 实时更新数据
    //判断是否可用
    if ([self.CMmanager isAccelerometerAvailable]) {
        //采集间隔 间隔为秒 push方法必须使用
        self.CMmanager.accelerometerUpdateInterval=1.0;
        //开始采集
        [self.CMmanager startAccelerometerUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
            if (error) {
                NSLog(@"出错 %@",error);
            }else{
                CGFloat X=accelerometerData.acceleration.x;
                CGFloat Y=accelerometerData.acceleration.y;
                CGFloat Z=accelerometerData.acceleration.z;
                NSLog(@"x轴:%f y轴:%f z轴:%f",X,Y,Z);
            }
        }];
    }

加速计使用pull方式 在需要的时候 能获取到轴的值

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #00b1ff}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4bd157}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'PingFang SC'; color: #4bd157}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ff4647}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #de38a6}span.s3 {font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s4 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures}span.s5 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s6 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s7 {font-variant-ligatures: no-common-ligatures; color: #08fa95}span.s8 {font-variant-ligatures: no-common-ligatures; color: #4bd157}span.s9 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures; color: #4bd157}span.s10 {font-variant-ligatures: no-common-ligatures; color: #00b1ff}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    /** 使用pull方式  需要的时候调用*/
    //创建运动管理者对象
    self.CMmanager=[CMMotionManager new];
    //判断是否能用
    if ([self.CMmanager isAccessibilityElement]) {
        //开始采集
        [self.CMmanager startAccelerometerUpdates];
    }
//    [self push];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    CMAccelerometerData* data= self.CMmanager.accelerometerData;
    CGFloat X=data.acceleration.x;
    CGFloat Y=data.acceleration.y;
    CGFloat Z=data.acceleration.z;
    NSLog(@"x轴:%f y轴:%f z轴:%f",X,Y,Z);
}

你可能感兴趣的:(iOS:CoreMotion框架--加速计的简单使用)