Detecting a shake

Send Snippet To: Save this snippet to Code Collector Pro -- view all powidl's snippets
language: Objective-C
license: Other

Code for Snippet:

                
// Ensures the shake is strong enough on at least two axes before declaring it a shake.
// "Strong enough" means "greater than a client-supplied threshold" in G's.
static BOOL L0AccelerationIsShaking(UIAcceleration* last, UIAcceleration* current, double threshold) {
        double
                deltaX = fabs(last.x - current.x),
                deltaY = fabs(last.y - current.y),
                deltaZ = fabs(last.z - current.z);
 
        return
                (deltaX > threshold && deltaY > threshold) ||
                (deltaX > threshold && deltaZ > threshold) ||
                (deltaY > threshold && deltaZ > threshold);
}
 
@interface L0AppDelegate : NSObject <UIApplicationDelegate> {
        BOOL histeresisExcited;
        UIAcceleration* lastAcceleration;
}
 
@property(retain) UIAcceleration* lastAcceleration;
 
@end
 
@implementation L0AppDelegate
 
- (void)applicationDidFinishLaunching:(UIApplication *)application {
        [UIAccelerometer sharedAccelerometer].delegate = self;
}
 
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
 
        if (self.lastAcceleration) {
                if (!histeresisExcited && L0AccelerationIsShaking(self.lastAcceleration, acceleration, 0.7)) {
                        histeresisExcited = YES;
 
                        /* SHAKE DETECTED. DO HERE WHAT YOU WANT. */
 
                } else if (histeresisExcited && !L0AccelerationIsShaking(self.lastAcceleration, acceleration, 0.2)) {
                        histeresisExcited = NO;
                }
        }
 
        self.lastAcceleration = acceleration;
}
 
// and proper @synthesize and -dealloc boilerplate code
 
@end
comments powered by Disqus

Info

Link to this snippet:


Download to Code Collector

To use the direct link to your snippet on CodeCollector.net either copy the html from the above section or drag the Download to Code Collector to where you would like to use it.

More Info:

Times Viewed: 558
Date Added: 2009-03-02 10:46:08
Last Modified: 0000-00-00 00:00:00

Web Analytics