how to detect and program around shakes for the iphone

delegates, iphone, iphone-sdk-3.0, shake

Solution

You should absolutely not be listening to `UIAccelerometer` directly with your own filtering to handle shake events. That is a high-power operation and should only be used by apps that need a high accelerometer sampling rate. Use the new motion events instead which have been added to `UIEvent`:

http://developer.apple.com/IPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html#//apple_ref/doc/uid/TP40007072-CH9-SW24

Just like touches, a motion event will be delivered to the first responder, then travel up the responder chain if the first responder does not respond. The `UIEvent` will have type `UIEventTypeMotion` and subtype `UIEventSubtypeMotionShake`.

Problem

I'm trying to implement the shake "tutorial" on this page, but I think I'm missing something. I copied his accelerometer function into myAppViewController.m file and put some nslogs in there to see if it even gets into the function when I use the simulators "shake" function. Nothing shows up in the debug console. http://mithin.in/2009/07/28/detecting-a-shake-using-iphone-sdk Can anyone explain what I might be missing? Or point me to a tutorial? I found this, which looks promising, but I don't know how to "put it in a UIView" How do I detect when someone shakes an iPhone? EDIT - now here's my working code because of the accepted answer's suggestion. Here's my code to detect the shake gesture in 3.0 iphone sdk. ``` -(BOOL)canBecomeFirstResponder { return YES; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self becomeFirstResponder]; } - (void)viewWillDisappear:(BOOL)animated { [self resignFirstResponder]; [super viewWillDisappear:animated]; } - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { NSLog(@"{motion ended event "); if (motion == UIEventSubtypeMotionShake) { NSLog(@"{shaken state "); } else { NSLog(@"{not shaken state "); } } ```

Original source

Related problems