Detecting Shaking
Apple’s shake-detection algorithm analyses eight to ten successive
pairs of raw accelerometer triplet values and determines the angle between
these readings. If the change in angular velocity between successive data
points is large then the algorithm determines that a UIEventSubtypeMotionShake has occurred, and the
motionBegan:withEvent: delegate method
is called. Conversely, if the change in angular velocity is small and a
shake event has been triggered, the motionEnded:withEvent: delegate method is
called.
Note
The iPhone is better at detecting side-to-side rather than front-to-back or up-and-down motions. Take this into account in the design of your application.
There are three motion delegate methods, mirroring the methods for
gesture handling: motionBegin:withEvent:, motionEnded:withEvent: and motionCancelled:withEvent:. The first indicates
the start of a motion event, the second the end of this event. You cannot
generate a new motion event for a second (or two) following the first
event. The final delegate method is called when a motion is interrupted by
a system event, such as an incoming phone call.
Let’s go ahead and add shake detection to our Accelerometer
application. You’ll need to add another UILabel to the UI that will change depending on
the motion event status. Click on the AccelerometerViewController.h interface file to
open it in the Standard Editor and add another UILabel marked as an IBOutlet to the class definition:
@interface AccelerometerViewController ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access