2013-10-02 2 views
0

Как настроить обработку, так что я могу определить, когда устройство стоит на месте (в какой-то порог)CMMotionManager обнаружения, когда устройство стоит на месте

ниже код не работает, как ожидалось (userAcceleration просто терке , в зависимости от ориентации устройства, и пользователь даже не перемещает устройство (это значение, возможно, происходит от тяжести))

self.motionManager = [[CMMotionManager alloc] init]; 
     self.motionManager.accelerometerUpdateInterval = 1/2.0; 
     [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 

      float accelerationThreshold = 0.75; 
      CMAcceleration userAcceleration = accelerometerData.acceleration; 
      if ((fabs(userAcceleration.x) > accelerationThreshold) 
       || (fabs(userAcceleration.y) > accelerationThreshold) 
       || (fabs(userAcceleration.z) > accelerationThreshold)) { 
       self.deviceMoved = YES; 
      } else { 
       self.deviceMoved = NO; 
      } 

     }]; 

ответ

1

необходимо использовать startDeviceMotionUpdatesToQueue

if (self.motionManager == nil) { 
     self.motionManager = [[CMMotionManager alloc] init]; 
     self.motionManager.accelerometerUpdateInterval = 1/2.0; 
     [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) { 

      float accelerationThreshold = 0.25; 
      CMAcceleration userAcceleration = motion.userAcceleration; 
      if ((fabs(userAcceleration.x) > accelerationThreshold) 
       || (fabs(userAcceleration.y) > accelerationThreshold) 
       || (fabs(userAcceleration.z) > accelerationThreshold)) { 
       self.deviceMoved = YES; 
      } else { 
       self.deviceMoved = NO; 
      } 

     }]; 
    } 
Смежные вопросы