2011-03-06 3 views
21

J'ai besoin de détecter quand le gyroscope/accéléromètre est activé une certaine quantité. Fondamentalement pour détecter quand il y a un mouvement de l'appareil. Je ne sais rien de Core Motion.Détection de mouvement iPhone simple

Peut-être que quelqu'un peut me diriger vers un tutoriel de démarrage ou quelque chose.

Merci d'avance.

Répondre

34

Je pense que vous devez utiliser Core Motion. Les bonnes nouvelles sont que ce n'est pas si difficile à utiliser pour votre domaine de problème. Commencez à lire le Event Handling Guide en particulier la section Traitement des données de mouvement de périphérique. Si vous voulez simplement savoir que un léger mouvement a été effectué, comme vous l'avez indiqué, vous pouvez omettre la gestion de rotation et le traitement de signal étroit sur CMDeviceMotion.userAcceleration. En effet, chaque rotation entraîne également des signaux accélérométriques.

Créer une CMDeviceMotionHandler comme décrit dans startDeviceMotionUpdatesToQueue:withHandler: Votre CMDeviceMotionHandler devrait faire quelque chose comme:

float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values 
CMAcceleration userAcceleration = deviceMotion.userAcceleration; 
if (fabs(userAcceleration.x) > accelerationThreshold) 
    || fabs(userAcceleration.y) > accelerationThreshold 
    || fabs(userAcceleration.z) > accelerationThreshold) { 
    // enter code here 
} 

Fondamentalement c'est tout. Gardez à l'esprit que chaque accélération aura une contrepartie. Cela signifie que si vous appliquez une force pour déplacer (c'est-à-dire accélérer) l'appareil vers la droite, il y aura une contrepartie pour la décélération pour arrêter le mouvement et laisser l'appareil reposer à la nouvelle position. Ainsi, votre condition if deviendra vraie deux fois pour chaque mouvement.

+0

Le lien que vous avez donné est excellent! Même si j'ai cherché des lectures de mouvement, et lu toutes les références de classe pertinentes - je ne pouvais pas trouver un résumé comme ça - merci! –

+0

Merci d'avoir expliqué d'une manière simple et facile à comprendre :) – Luqman

+1

Ce lien est mort "Manipulation des données traitées par le dispositif" Pouvez-vous mettre à jour le lien? – bpolat

2

En viewDidAppear, devenir le premier intervenant:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 

Et assurez-vous que vous pouvez être le premier répondeur:

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

Ensuite, vous pouvez mettre en œuvre la détection de mouvement.

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (event.subtype == UIEventTypeMotion){ 
     //there was motion 
    } 
}