2011-02-24 3 views
0

J'utilise le mouvement de base sur mon application. J'ai l'objet motionManager assigné à une propriété de ma classe principale. Quelque chose commeiPhone - horodatage de mouvement de base

@property (nonatomic, retain) CMMotionManager *motionManager; 

chaque fois que je vais utiliser le mouvement de base, je lui assigner en utilisant quelque chose comme:

- (void) initializeCoreMotion { 
    CMMotionManager *myMotionManager = [[CMMotionManager alloc] init]; 
    self.motionManager = myMotionManager; 
    [myMotionManager release]; 
} 

Ensuite, la méthode que les échantillons que les données, je dois cela à lire l'horodatage d'un échantillon.

CMDeviceMotion *motion = self.motionManager.deviceMotion;  
timestamp = motion.timestamp; 
if (firstTime) { 
    timestampReference = timestamp; 
    firstTime = NO; 
} else { 
    timestamp = timestamp - timestampReference; 
} 

C'est-à-dire: la première fois qu'il échantillonne, il stocke la valeur initiale. Les temps suivants, il échantillonne, il va soustraire la valeur actuelle de la référence pour savoir combien de secondes ont passé.

le problème est le suivant. Supposons que j'échantillonne une fois par seconde. Je commence par échantillonner pendant 10 secondes. Donc, la variable d'horodatage ira comme 0, 1, 2, 3, 4, 5 ... 10. Puis je m'arrête et ne fais pas d'échantillon pendant 20 secondes. Quand je recommence l'échantillonnage. La deuxième fois, l'horodatage commencera à 31, 32, 33, 34 ...

J'ai vérifié la méthode d'échantillonnage et firstTime est OUI à chaque fois qu'un premier échantillon se produit ...

toute pensée? Comment réinitialiser cela?

merci.

Répondre

1

Semble être bien la façon dont vous le faites. Mais pourquoi créez-vous une nouvelle instance de CMMotionManager? J'utilise:

if ([motionManager isDeviceMotionAvailable] && [motionManager isDeviceMotionActive]) { 
    [motionManager stopDeviceMotionUpdates]; 
} 

et continuer:

[motionManager startDeviceMotionUpdatesToQueue:operationQueue withHandler:deviceMotionHandler]; 

J'étais curieux de voir s'il y a encore quelque chose de mal dans iOS avec les horodateurs et donc je viens d'essayer votre code ou chose similaire en utilisant un statique. Tout fonctionne comme prévu. Peut-être que votre timestampReference est écrasé ailleurs?

+0

Ceci est très étrange car la référence est juste utilisée une fois dans une branche du code et ensuite lue par une autre. Je vais vérifier cela. J'ai décidé de recréer un objet parce que j'avais des problèmes avec cet horodatage. Je vais essayer votre approche. Merci. – SpaceDog

Questions connexes