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 ");
}
}
Here is my answer that works:
//MainViewController.m
I tested only with simulator and it returns me:
I hope this help, because I loose 2 hours of doing this work.
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 toUIEvent
: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 typeUIEventTypeMotion
and subtypeUIEventSubtypeMotionShake
.