The application can start a certain method regardless of the view controller or mobile phone.
The thought is to use the "MotionEvent" encapsulated by Apple, but if you simply add the code to a view controller, only when the view controller is displayed on the front end, shake the phone to start.
-(BOOL) canBecomeFirstResponder {// The default value is NO. Therefore, you must rewrite this method to YES return YES;} and then implement the following methods: // similar to the TouchEvent event-(void) motionBegan :( UIEventSubtype) motion withEvent :( UIEvent *) event {}-(void) motionEnded :( UIEventSubtype) motion withEvent :( UIEvent *) event {NSLog (@ "shake ");} -(void) motionCancelled :( UIEventSubtype) motion withEvent :( UIEvent *) event {}
Solution: Use Category to expand UIWindow. The Code is as follows:
UIWindow +. h
#import
#define UIEventSubtypeMotionShakeNotification @"UIEventSubtypeMotionShakeNotification"@interface UIWindow (Motion)// @override- (BOOL)canBecomeFirstResponder;- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;@end
UIWindow +. m
# Import "UIWindow +. h "@ implementation UIWindow (Motion)-(BOOL) canBecomeFirstResponder {// The default value is NO. Therefore, you must rewrite this method to YES return YES;} and then implement the following methods: // similar to the TouchEvent event-(void) motionBegan :( UIEventSubtype) motion withEvent :( UIEvent *) event {}-(void) motionEnded :( UIEventSubtype) motion withEvent :( ui* event *) event {NSLog (@ "shake");}-(void) motionCancelled :( UIEventSubtype) motion withEvent :( UIEvent *) event {}@ end