È necessario inizializzare il responsabile del movimento e quindi controllare motion.userAcceleration.y
valore per un valore di accelerazione appropriata (misurata in metri/secondo/secondo).
Nell'esempio seguente, controllo 0.05 che ho trovato è una mossa in avanti abbastanza decente del telefono. Aspetto anche che l'utente rallenti significativamente (-Y valore) prima di disegnare. La regolazione del dispositivo MotionUpdateInterval determinerà la reattività della tua app ai cambiamenti di velocità. In questo momento si sta campionando a 1/60 secondi.
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0/60.0;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
NSLog(@"Y value is: %f", motion.userAcceleration.y);
if (motion.userAcceleration.y > 0.05) {
//a solid move forward starts
lineLength++; //increment a line length value
}
if (motion.userAcceleration.y < -0.02 && lineLength > 10) {
/*user has abruptly slowed indicating end of the move forward.
* we also make sure we have more than 10 events
*/
[self drawLine]; /* writing drawLine method
* and quartz2d path code is left to the
* op or others */
[motionManager stopDeviceMotionUpdates];
}
}];
Nota questo codice presuppone che il telefono sia posizionato orizzontalmente o leggermente inclinato e che l'utente sta spingendo in avanti (lontano da se stessi, o in movimento con telefono) in modalità verticale.
fonte
2013-01-24 04:38:55
Puoi darmi il tuo codice perché sto affrontando lo stesso problema. Ho provato ma si blocca la mia app. – user2526811
@ user2526811, ti invierò il codice stasera, inserisci la tua mail adrress –
Grazie per la tua risposta. Il mio id è 'pakshay8800 @ gmail.com' – user2526811