trzeba zainicjować menedżera ruchu, a następnie sprawdzić motion.userAcceleration.y
wartość odpowiednią wartość przyspieszenia (mierzona w metrach/sekundę/sekundę).
W poniższym przykładzie sprawdzam, czy 0,05, które znalazłem, jest dość przyzwoitym posunięciem do przodu telefonu. Czekam też, aż użytkownik znacznie zwolni (-Y wartość) przed rysowaniem. Dostosowując urządzenie, funkcja MotionUpdateInterval określi czas reakcji Twojej aplikacji na zmiany prędkości. Obecnie jest to próbkowanie w 1/60 sekundy.
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];
}
}];
Uwaga Ten kod zakłada, że telefon leży płasko lub lekko pochylony i że użytkownik naciska do przodu (z dala od siebie, lub przeniesienie z telefonem) w trybie pionowym.
Czy możesz podać mi swój kod, ponieważ mam do czynienia z tym samym problemem. Próbowałem, ale to spowodowało awarię mojej aplikacji. – user2526811
@ user2526811, wyślę ci kod dziś wieczorem, opublikuj swój adres mailowy –
Dziękuję za odpowiedź. Mój identyfikator to "pakshay8800 @ gmail.com" – user2526811